一般上传图片分三步:
第一步:将原始图片上传到服务器端保存,不妨命名为src.jpg
第二步:在浏览器端将src.jpg显示出来,然后使用jQuery,对其进行“客户端剪切”。
所谓客户端剪切就是根据用户在界面中对原始图片放大,移动,剪切时,获得一些参数。
具体需要六个参数(srcWidth, srcHeight, rect.x, rect.y , rect.width, rect.height)参数。
其中,srcWidth 和srcHeight表明原始图片在客户端放大后的宽和高
rect.x和rect.y表明剪切部分相对(srcWidth, srcHeight)的起始坐标
rect.width和rect.height表示需要剪切的图片的大小。
第三步:获取第二步得到的参数,对内存中原始图片先进行预处理(按照srcWidth和srcHeight进行缩放)、剪切。
然后对预处理后的内存图像剪切,打印出来。
第一步实现比较简单,第二步需要学习jQuery,网上例子很多。我们重点讨论第三步, java切图。
1.main函数
- packagesyj.main;
- importjava.awt.Rectangle;
- importjava.io.File;
- importjava.io.IOException;
- importsyj.util.ImageHepler;
- publicclassTest{
- publicstaticvoidmain(String[]args)throwsIOException{
- StringpicPath="img/src.jpg";
- StringdestPath="img/result.jpg";
- Rectanglerect=newRectangle(0,0,2000,1200);
- ImageHepler.cut(picPath,destPath,1440,900,rect);
- }
- }
2.关键图像操作函数
- packagesyj.util;
- importjava.awt.Color;
- importjava.awt.Graphics;
- importjava.awt.Image;
- importjava.awt.Rectangle;
- importjava.awt.image.BufferedImage;
- importjava.io.File;
- importjava.io.IOException;
- importjava.io.PrintStream;
- importjavax.imageio.ImageIO;
- publicclassImageHepler{
- /**
- *@Description:将srcImageFile裁剪后生成destImageFile
- *@paramsrcImageFile原始图
- *@paramdestImageFile目标图
- *@paramwidth原始图预处理后width
- *@paramheight原始图预处理后height
- *@paramrect目标图输出的格式(rect.x,rect.y,rect.width,rect.height)
- *@throwsIOException
- *@authorSunYanjun
- */
- publicstaticvoidcut(StringsrcImageFile,StringdestImageFile,intwidth,intheight,Rectanglerect)throwsIOException{
- Imageimage=ImageIO.read(newFile(srcImageFile));
- BufferedImagebImage=makeThumbnail(image,width,height);
- //把原始图片输出
- ImageIO.write(bImage,"jpg",newFile("img/src2.jpg"));
- saveSubImage(bImage,rect,newFile(destImageFile));
- }
- /**
- *@Description:将srcImageFile裁剪后生成destImageFile
- *@paramsrcImageFile原始图
- *@paramdestImageFile目标图
- *@paramwidth原始图预处理后width
- *@paramheight原始图预处理后height
- *@paramrect目标图输出的格式(rect.x,rect.y,rect.width,rect.height)
- *@throwsIOException
- *@authorSunYanjun
- */
- publicstaticvoidcut(FilesrcImageFile,FiledestImageFile,intwidth,intheight,Rectanglerect)throwsIOException{
- Imageimage=ImageIO.read(srcImageFile);
- BufferedImagebImage=makeThumbnail(image,width,height);
- saveSubImage(bImage,rect,destImageFile);
- }
- /**
- *@Description:对原始图片根据(x,y,width,height)=(0,0,width,height)进行缩放,生成BufferImage
- *@paramimg
- *@paramwidth预处理后图片的宽度
- *@paramheight预处理后图片高度
- *@return
- *@authorSunYanjun
- *@throwsIOException
- */
- privatestaticBufferedImagemakeThumbnail(Imageimg,intwidth,intheight)throwsIOException{
- BufferedImagetag=newBufferedImage(width,height,1);
- Graphicsg=tag.getGraphics();
- g.drawImage(img.getScaledInstance(width,height,4),0,0,null);
- g.dispose();
- returntag;
- }
- /**
- *@Description:对BufferImage按照(x,y,width,height)=(subImageBounds.x,subImageBounds.y,subImageBounds.width,subImageBounds.height)进行裁剪
- *如果subImageBounds范围过大,则用空白填充周围的区域。
- *
- *@paramimage
- *@paramsubImageBounds
- *@paramdestImageFile
- *@throwsIOException
- *@authorSunYanjun
- */
- privatestaticvoidsaveSubImage(BufferedImageimage,RectanglesubImageBounds,FiledestImageFile)throwsIOException{
- StringfileName=destImageFile.getName();
- StringformatName=fileName.substring(fileName.lastIndexOf('.')+1);
- BufferedImagesubImage=newBufferedImage(subImageBounds.width,subImageBounds.height,1);
- Graphicsg=subImage.getGraphics();
- if((subImageBounds.width>image.getWidth())
- ||(subImageBounds.height>image.getHeight())){
- intleft=subImageBounds.x;
- inttop=subImageBounds.y;
- if(image.getWidth()<subImageBounds.width)
- left=(subImageBounds.width-image.getWidth())/2;
- if(image.getHeight()<subImageBounds.height)
- top=(subImageBounds.height-image.getHeight())/2;
- g.setColor(Color.white);
- g.fillRect(0,0,subImageBounds.width,subImageBounds.height);
- g.drawImage(image,left,top,null);
- ImageIO.write(image,formatName,destImageFile);
- }else{
- g.drawImage(image.getSubimage(subImageBounds.x,subImageBounds.y,
- subImageBounds.width,subImageBounds.height),0,0,null);
- }
- g.dispose();
- ImageIO.write(subImage,formatName,destImageFile);
- }
- }
BufferedImage subImage = new BufferedImage(subImageBounds.width, subImageBounds.height, BufferedImage.TYPE_INT_RGB);Graphics2D g = subImage.createGraphics();
// 解决图片背景透明问题--且只针对png
subImage = g.getDeviceConfiguration().createCompatibleImage(subImageBounds.width, subImageBounds.height, Transparency.TRANSLUCENT);
g.dispose();
g = subImage.createGraphics();
相关推荐
java 上传图片 头像 预览 切割 绝对好用。完整源码,下载搭上就可以用
java 图片上传,可预览可剪切可缩放,没有积分下载就私信我
在js中压缩,在页面上选定区域并上传,在java中根据参数处理图像,页面处理图片缩放裁剪上传的功能。
自由裁剪大小保留高清图片效果,源码文件,无需改动,直接导入即可使用,无兼容...本上传程序可对上传的图片进行分类,像一个简单的小相册一样,可拿去学习,也可以将核心代码剥离出来,用到其它项目中也是不错的选择哦
实现了类似开心网等网站头像上传是的头像裁剪!这是一个在MyEclipse8.5下测试成功的一个jsp项目!导入工程就可以运行!
jquery crop+java 裁剪上传图片,对图片缩放、移动、旋转、裁剪 上传到服务器。
java实现的图片处理,主要功能图片缩放,按比例缩放,截剪
3.利用jcrop裁剪工具对图片进行裁剪并且实时预览 4.点击确定按钮将裁剪用到的参数传入后台,后台图片进行剪切,之后缩放成我们需要的格式 5.最后将图片路径传到前台进行展示 前台页面代码为: <script src="j
spring-mvc整合cropper图片裁剪插件....具体功能:上传多种不同类型的图片,图片可以任意缩放,裁剪框也可以任意缩放,可以旋转图片等等。。。 具体实现过程,请访问我的博客. http://blog.csdn.net/u012759397
用户也可从本地选择一张图片,然后可对选择的图片或拍照的图片进行拖动、缩放后截取,最后上传到web服务器。后台使用java实现图片的接收和存储
内容索引:JSP源码,上传下载,图片裁切,JSP上传文件 版、JS版的图片裁切功能,但是没找到JAVA...它包括两部分,一部分上传图片,另一部分对图片进行处理,缩放并裁切。程序运行在JSP环境下,你需要配置好这种环境才行。
支持使用样式规则处理图片,例如:图片缩放、裁剪、格式转换等;支持使用高级压缩接口对图片进行压缩;支持盲水印的添加与提取;支持图片、主题CSS/JS等静态资源CDN加速;支持本地附件不保留,适用于应用空间不可写...
强大的功能:原图支持本地上传、视频拍照和网络加载,图片编辑有缩放、裁剪、旋转、定位和调色等功能。 丰富的接口:可自定义头像(大小、数目...)、所有文本(包括其字体,大小,颜色,方便扩展多语言站点)、可在...
能获知图片的中央矩片后裁剪后并按照设定的尺寸进行缩放。能对指定栏目设定特定的裁剪宽度和高度。能对指定栏目下的文章设定原图上传。 16.★每个栏目可拥有独立的私有特定的HTML,可以无损后显示在栏目的显示页中...
能智能感知图片(包括JPG、PNG、GIF等格式)的中央矩片后裁剪后并按照设定的尺寸进行缩放。能对指定栏目设定特定的裁剪宽度和高度。能对指定栏目下的文章设定原图上传。20.每篇文章都各自拥有独立的调查模块,可以...
截图输入需要截图的分辨率和所需截取的图片数量,视频将随机截取所需的图片。 3.编单将所有扫描的视频导出一个编辑单Excel文件,并替换视频的父文件夹作为一个单独的工作表替换;替换合并工作表将所有视频放入一个...