
Java图像处理技巧四则
下面代码中用到的sourceImage是一个已经存在的Image对象
图像剪切
对于一个已经存在的Image对象,要得到它的一个局部图像,可以使用下面的步骤:
//import javaawt;
//import javaawtimage;
Image croppedImage;
ImageFilter cropFilter;
CropFilter =new CropImageFilter(25,30,75,75); //四个参数分别为图像起点坐标和宽高,即CropImageFilter(int x,int y,int width,int height),详细情况请参考API
CroppedImage= ToolkitgetDefaultToolkit()createImage(new FilteredImageSource(sourceImagegetSource(),cropFilter));
如果是在Component的子类中使用,可以将上面的ToolkitgetDefaultToolkit()去掉。FilteredImageSource是一个ImageProducer对象。
图像缩放
对于一个已经存在的Image对象,得到它的一个缩放的Image对象可以使用Image的getScaledInstance方法:
Image scaledImage=sourceImage getScaledInstance(100,100, ImageSCALE_DEFAULT); //得到一个100X100的图像
Image doubledImage=sourceImage getScaledInstance(sourceImagegetWidth(this)2,sourceImagegetHeight(this)2, ImageSCALE_DEFAULT); //得到一个放大两倍的图像,这个程序一般在一个swing的组件中使用,而类Jcomponent实现了图像观察者接口ImageObserver,所有可以使用this。
//其它情况请参考API
灰度变换
下面的程序使用三种方法对一个彩色图像进行灰度变换,变换的效果都不一样。一般而言,灰度变换的算法是将象素的三个颜色分量使用R03+G059+ B011得到灰度值,然后将之赋值给红绿蓝,这样颜色取得的效果就是灰度的。另一种就是取红绿蓝三色中的最大值作为灰度值。java核心包也有一种算法,但是没有看源代码,不知道具体算法是什么样的,效果和上述不同。
/ GrayFilterjava/
/@author:cherami /
/email:cherami@163net/
import javaawtimage;
public class GrayFilter extends RGBImageFilter {
int modelStyle;
public GrayFilter() {
modelStyle=GrayModelCS_MAX;
canFilterIndexColorModel=true;
}
public GrayFilter(int style) {
modelStyle=style;
canFilterIndexColorModel=true;
}
public void setColorModel(ColorModel cm) {
if (modelStyle==GrayModel
else if (modelStyle==GrayModel
}
public int filterRGB(int x,int y,int pixel) {
return pixel;
}
}
/ GrayModeljava/
/@author:cherami /
/email:cherami@163net/
import javaawtimage;
public class GrayModel extends ColorModel {
public static final int CS_MAX=0;
public static final int CS_FLOAT=1;
ColorModel sourceModel;
int modelStyle;
public GrayModel(ColorModel sourceModel) {
super(sourceModelgetPixelSize());
thissourceModel=sourceModel;
modelStyle=0;
}
public GrayModel(ColorModel sourceModel,int style) {
super(sourceModelgetPixelSize());
thissourceModel=sourceModel;
modelStyle=style;
}
public void setGrayStyle(int style) {
modelStyle=style;
}
protected int getGrayLevel(int pixel) {
if (modelStyle==CS_MAX) {
return Mathmax(sourceModelgetRed(pixel),Mathmax(sourceModelgetGreen(pixel),sourceModelgetBlue(pixel)));
}
else if (modelStyle==CS_FLOAT){
return (int)(sourceModelgetRed(pixel)03+sourceModelgetGreen(pixel)059+sourceModelgetBlue(pixel)011);
}
else {
return 0;
}
}
public int getAlpha(int pixel) {
return sourceModelgetAlpha(pixel);
}
public int getRed(int pixel) {
return getGrayLevel(pixel);
}
public int getGreen(int pixel) {
return getGrayLevel(pixel);
}
public int getBlue(int pixel) {
return getGrayLevel(pixel);
}
public int getRGB(int pixel) {
int gray=getGrayLevel(pixel);
return (getAlpha(pixel)<<24)+(gray<<16)+(gray<<8)+gray;
}
}
如果你有自己的算法或者想取得特殊的效果,你可以修改类GrayModel的方法getGrayLevel()。
色彩变换
根据上面的原理,我们也可以实现色彩变换,这样的效果就很多了。下面是一个反转变换的例子:
/ ReverseColorModeljava/
/@author:cherami /
/email:cherami@163net/
import javaawtimage;
public class ReverseColorModel extends ColorModel {
ColorModel sourceModel;
public ReverseColorModel(ColorModel sourceModel) {
super(sourceModelgetPixelSize());
thissourceModel=sourceModel;
}
public int getAlpha(int pixel) {
return sourceModelgetAlpha(pixel);
}
public int getRed(int pixel) {
return ~sourceModelgetRed(pixel);
}
public int getGreen(int pixel) {
return ~sourceModelgetGreen(pixel);
}
public int getBlue(int pixel) {
return ~sourceModelgetBlue(pixel);
}
public int getRGB(int pixel) {
return (getAlpha(pixel)<<24)+(getRed(pixel)<<16)+(getGreen(pixel)<<8)+getBlue(pixel);
}
}
/ ReverseColorModeljava/
/@author:cherami /
/email:cherami@163net/
import javaawtimage;
public class ReverseFilter extends RGBImageFilter {
public ReverseFilter() {
canFilterIndexColorModel=true;
}
public void setColorModel(ColorModel cm) {
substituteColorModel(cm,new ReverseColorModel(cm));
}
public int filterRGB(int x,int y,int pixel) {
return pixel;
}
}
要想取得自己的效果,需要修改ReverseColorModeljava中的三个方法,getRed、getGreen、getBlue。
下面是上面的效果的一个总的演示程序。
/GrayImagejava/
/@author:cherami /
/email:cherami@163net/
import javaawt;
import javaawtimage;
import javaxswing;
import javaawtcolor;
public class GrayImage extends JFrame{
Image source,gray,gray3,clip,bigimg;
BufferedImage bimg,gray2;
GrayFilter filter,filter2;
ImageIcon ii;
ImageFilter cropFilter;
int iw,ih;
public GrayImage() {
ii=new ImageIcon(\"images/11gif\");
source=iigetImage();
iw=sourcegetWidth(this);
ih=sourcegetHeight(this);
filter=new GrayFilter();
filter2=new GrayFilter(GrayModelCS_FLOAT);
gray=createImage(new FilteredImageSource(sourcegetSource(),filter));
gray3=createImage(new FilteredImageSource(sourcegetSource(),filter2));
cropFilter=new CropImageFilter(5,5,iw-5,ih-5);
clip=createImage(new FilteredImageSource(sourcegetSource(),cropFilter));
bigimg=sourcegetScaledInstance(iw2,ih2,ImageSCALE_DEFAULT);
MediaTracker mt=new MediaTracker(this);
mtaddImage(gray,0);
try {
mtwaitForAll();
} catch (Exception e) {
}
在后台,java中根据路径找目录下所有的视频文件,然后把名字和url返回到前台,前台显示列表,点击后打开播放页,网上很多flash制作的播放器,嵌入到网页中并把视频url传递进去就可以了。博客nodaynet我若有时间就写个例子
有时候感觉培训的视频不是很适合自学,当初开始看培训视频很激动,很喜欢,但是学习的时候特别在学校会受到各种课程和其他的干扰,加上培训视频都是分好每天的,意味着每天要学完哪些内容,那时候自学视频还加快了播放速度,当时还觉得比去现场培训的好,因为自己加速了,最后发现有很大问题,首先自学你要自己在那里呆着看视频自学很要毅力,而且要完成当天视频内容(每天视频还是很长的),当时1天大概可以看15天的视频吧,开始还好,但是后面就有点难顶,毕竟没有培训的那个环境,学到后面又想去看前面的,慢慢的觉得内容有点多了,想放弃又不舍得,坚持看又觉得东西多难受,如果每天看不完当天的视频内容又受到打击,如果两天看一天视频,节奏也乱,这是根据之后去培训发现的,培训的节奏真的好,环境好,老师晚上老师布置作业,写完有成就感,而且节奏很好,写完就感觉完成了今天的任务,不像自学没有完成当天任务的感觉和成就感,所以自学完全看培训视频感觉不是很好,但是有些机构或者网上发的视频就没有分好每天的任务量,意味着你可以随心的学,好处是你没有这么大的压力,时间可以合理安排,当然也有不好的,就是你都不知道自己学到什么进度了,但是感觉自学还是学这种比较好,因为自学干扰的因素太多了,而且自学的方法也不一定是对的。最好的不一定适合你,适合你或许才是最好的,不要总想找到最好的最适合你的,你不可能什么都体验到,所以当你遇到你觉得适合你的就去要了,而不要等到浪费了所有才来后知后觉。
Mars_Java4Android视频百度网盘资源免费下载
p6am
Mars_Java4Android视频|51-53集|41-50集|31-40集|21-30集|11-20集|01-10集|10_循环语句mp4|09_练习课(二)mp4|08_分支语句mp4|07_运算符与表达式mp4|06_练习课(一)mp4|05_Java的基本数据类型mp4|04_Java的变量mp4|03_Java基本概念(一)mp4
那就要用上防盗链技术了。
首先介绍一下加密视频被盗链的几种常见方式:
1、播放器破解。这种方式利用一组正版的注册码,把其对应的机器码固定住,达到任何机器都可以注册成功。
2、翻录。分为软翻录(用软件录屏)和硬翻录(视频采集设备来录制,当然,拿手机拍也算是一种啦)
3、提取。这种方式技术难度最高,效果最好,最终效果是提取出原始未加密的视频。
接下来分析一下视频加密技术是怎么防止视频被破解或者说怎么提升破解成本的。
严格来说没有什么破解播放器既能达到破解视频的目的,点量在这方便的经验是在播放器和视频本身的加密方面都做了充分加密。点量加密文件指定播放器区别于普通播放器的的地方是在播放视频时不全部载入,而是先只载入前面5分钟,等播放到4分钟左右时再去载入后面的5分钟视频。这样还可以节省很多服务器流量,避免用户只看2-3分钟暂停在那,也把整个视频给分发下去。另外就是播放器获取视频时传入一些token给服务器,服务器可以通过session等判断用户的权限,权限确认通过才发放flv文件,并且发放的flv文件是经过处理的,播放器收到flv数据后合并播放,用户即使下载到这些零散的flv文件,也很难形成完整的视频。以上技术结合使用点量视频加密系统,也完全可以不安装任何软件就能实现视频的防破解。
对于视频破解中的翻录来说,针对软翻录,视频加密软件预设翻录程序黑名单,禁止翻录程序启动。而且用户还可以根据市场动向,不断增加黑名单。甚至禁止视频播放期间启动其他播放器、浏览器等任何程序。针对硬翻录,除了在视频上添加LOGO、水印、跑马灯信息等,还可以设置观看用户ID飘屏。即便视频外泄,也能及时查到直接相关人追究责任。还有一种技术方式是视频播放过程中加入问题,视频播放到指定的时间点后播放器会自动d出问题(如果是幼儿课程,也可以是互动动画),要求观看者回答,观看者只有在正确回答问题后才能继续播放,如问题回答错误,视频可以被跳至其它指定时间点或者禁止观看等。
至于视频提取,这种破解的方式一般是专业技术人员所为。既然说到专业技术,那么一些课程成本较高或者特殊单位的视频需要加密保护防破解,则更应该选择加密技术水平高的合作公司,而不是千篇一律的市面化产品。私有定制化加密技术显然更适合这类客户群体,除了可以提供加密安全系数,还可以随着技术水平的不断上升进行私有加密产品的不断升级维护。像点量的老客户百度传课、勤学网等,甚至在专供破解的各大论坛都是一直传闻的大难题。
我都用struts带的commons-fileUpload组件smartUpload没用过,但是我想你这句upfilesaveAs(upFilePath,FileSAVEAS_PHYSICAL);应该有返回值吧。如果接受到文件信息并写入硬盘返回true什么的。最后再判断这个返回值,真写入了文件后再把信息写入数据库。你写入数据库代码直接放在上传文件代码后面,不管你文件传成功没有都把视频信息写入数据库,这样的结构本身就是不合理的。
很简单啊,你递归出一个文件夹里面的视频类型的文件啊,(如果是web,那就是加url后面就是在项目里的文件夹啊,)然后把他们的路径保存为json格式的数据啊,然后传递给前台页面啊,然后这些视频链接就得到了啊,然后再用swf播放啊,这个用js就可以了啊,so easy 啊
以上就是关于新手学习使用Java,尝试着做一个项目使用Java做一个视频图像的处理。全部的内容,包括:新手学习使用Java,尝试着做一个项目使用Java做一个视频图像的处理。、怎么用java/web代码播放本地视频、曾经自学一段时间Java,发现效果不理想,请问是学习方式出了问题还是找到的视频不好呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)