`
零点5度
  • 浏览: 19286 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java对上传图片缩放裁剪

    博客分类:
  • java
 
阅读更多

一般上传图片分三步:

第一步:将原始图片上传到服务器端保存,不妨命名为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函数

Java代码 收藏代码
  1. packagesyj.main;
  2. importjava.awt.Rectangle;
  3. importjava.io.File;
  4. importjava.io.IOException;
  5. importsyj.util.ImageHepler;
  6. publicclassTest{
  7. publicstaticvoidmain(String[]args)throwsIOException{
  8. StringpicPath="img/src.jpg";
  9. StringdestPath="img/result.jpg";
  10. Rectanglerect=newRectangle(0,0,2000,1200);
  11. ImageHepler.cut(picPath,destPath,1440,900,rect);
  12. }
  13. }



2.关键图像操作函数

Java代码 收藏代码
  1. packagesyj.util;
  2. importjava.awt.Color;
  3. importjava.awt.Graphics;
  4. importjava.awt.Image;
  5. importjava.awt.Rectangle;
  6. importjava.awt.image.BufferedImage;
  7. importjava.io.File;
  8. importjava.io.IOException;
  9. importjava.io.PrintStream;
  10. importjavax.imageio.ImageIO;
  11. publicclassImageHepler{
  12. /**
  13. *@Description:将srcImageFile裁剪后生成destImageFile
  14. *@paramsrcImageFile原始图
  15. *@paramdestImageFile目标图
  16. *@paramwidth原始图预处理后width
  17. *@paramheight原始图预处理后height
  18. *@paramrect目标图输出的格式(rect.x,rect.y,rect.width,rect.height)
  19. *@throwsIOException
  20. *@authorSunYanjun
  21. */
  22. publicstaticvoidcut(StringsrcImageFile,StringdestImageFile,intwidth,intheight,Rectanglerect)throwsIOException{
  23. Imageimage=ImageIO.read(newFile(srcImageFile));
  24. BufferedImagebImage=makeThumbnail(image,width,height);
  25. //把原始图片输出
  26. ImageIO.write(bImage,"jpg",newFile("img/src2.jpg"));
  27. saveSubImage(bImage,rect,newFile(destImageFile));
  28. }
  29. /**
  30. *@Description:将srcImageFile裁剪后生成destImageFile
  31. *@paramsrcImageFile原始图
  32. *@paramdestImageFile目标图
  33. *@paramwidth原始图预处理后width
  34. *@paramheight原始图预处理后height
  35. *@paramrect目标图输出的格式(rect.x,rect.y,rect.width,rect.height)
  36. *@throwsIOException
  37. *@authorSunYanjun
  38. */
  39. publicstaticvoidcut(FilesrcImageFile,FiledestImageFile,intwidth,intheight,Rectanglerect)throwsIOException{
  40. Imageimage=ImageIO.read(srcImageFile);
  41. BufferedImagebImage=makeThumbnail(image,width,height);
  42. saveSubImage(bImage,rect,destImageFile);
  43. }
  44. /**
  45. *@Description:对原始图片根据(x,y,width,height)=(0,0,width,height)进行缩放,生成BufferImage
  46. *@paramimg
  47. *@paramwidth预处理后图片的宽度
  48. *@paramheight预处理后图片高度
  49. *@return
  50. *@authorSunYanjun
  51. *@throwsIOException
  52. */
  53. privatestaticBufferedImagemakeThumbnail(Imageimg,intwidth,intheight)throwsIOException{
  54. BufferedImagetag=newBufferedImage(width,height,1);
  55. Graphicsg=tag.getGraphics();
  56. g.drawImage(img.getScaledInstance(width,height,4),0,0,null);
  57. g.dispose();
  58. returntag;
  59. }
  60. /**
  61. *@Description:对BufferImage按照(x,y,width,height)=(subImageBounds.x,subImageBounds.y,subImageBounds.width,subImageBounds.height)进行裁剪
  62. *如果subImageBounds范围过大,则用空白填充周围的区域。
  63. *
  64. *@paramimage
  65. *@paramsubImageBounds
  66. *@paramdestImageFile
  67. *@throwsIOException
  68. *@authorSunYanjun
  69. */
  70. privatestaticvoidsaveSubImage(BufferedImageimage,RectanglesubImageBounds,FiledestImageFile)throwsIOException{
  71. StringfileName=destImageFile.getName();
  72. StringformatName=fileName.substring(fileName.lastIndexOf('.')+1);
  73. BufferedImagesubImage=newBufferedImage(subImageBounds.width,subImageBounds.height,1);
  74. Graphicsg=subImage.getGraphics();
  75. if((subImageBounds.width>image.getWidth())
  76. ||(subImageBounds.height>image.getHeight())){
  77. intleft=subImageBounds.x;
  78. inttop=subImageBounds.y;
  79. if(image.getWidth()<subImageBounds.width)
  80. left=(subImageBounds.width-image.getWidth())/2;
  81. if(image.getHeight()<subImageBounds.height)
  82. top=(subImageBounds.height-image.getHeight())/2;
  83. g.setColor(Color.white);
  84. g.fillRect(0,0,subImageBounds.width,subImageBounds.height);
  85. g.drawImage(image,left,top,null);
  86. ImageIO.write(image,formatName,destImageFile);
  87. }else{
  88. g.drawImage(image.getSubimage(subImageBounds.x,subImageBounds.y,
  89. subImageBounds.width,subImageBounds.height),0,0,null);
  90. }
  91. g.dispose();
  92. ImageIO.write(subImage,formatName,destImageFile);
  93. }
  94. }
  95.  

 


 

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 上传图片 头像 预览 切割 绝对好用。完整源码,下载搭上就可以用

    java 图片上传,可预览可剪切可缩放

    java 图片上传,可预览可剪切可缩放,没有积分下载就私信我

    java+jq+jcrop缩放裁剪上传图片

    在js中压缩,在页面上选定区域并上传,在java中根据参数处理图像,页面处理图片缩放裁剪上传的功能。

    java版头像上传缩放裁剪功能类似qq头像上传

    自由裁剪大小保留高清图片效果,源码文件,无需改动,直接导入即可使用,无兼容...本上传程序可对上传的图片进行分类,像一个简单的小相册一样,可拿去学习,也可以将核心代码剥离出来,用到其它项目中也是不错的选择哦

    jsp+CropZoom+jquery+java 图片缩放裁剪

    实现了类似开心网等网站头像上传是的头像裁剪!这是一个在MyEclipse8.5下测试成功的一个jsp项目!导入工程就可以运行!

    jquery crop+java 裁剪上传图片

    jquery crop+java 裁剪上传图片,对图片缩放、移动、旋转、裁剪 上传到服务器。

    图片缩放截剪功能_JAVA源码

    java实现的图片处理,主要功能图片缩放,按比例缩放,截剪

    jquery.Jcrop结合JAVA后台实现图片裁剪上传实例

    3.利用jcrop裁剪工具对图片进行裁剪并且实时预览 4.点击确定按钮将裁剪用到的参数传入后台,后台图片进行剪切,之后缩放成我们需要的格式 5.最后将图片路径传到前台进行展示 前台页面代码为: &lt;script src="j

    spring-mvc整合cropper图片裁剪插件

    spring-mvc整合cropper图片裁剪插件....具体功能:上传多种不同类型的图片,图片可以任意缩放,裁剪框也可以任意缩放,可以旋转图片等等。。。 具体实现过程,请访问我的博客. http://blog.csdn.net/u012759397

    js图片裁剪

    用户也可从本地选择一张图片,然后可对选择的图片或拍照的图片进行拖动、缩放后截取,最后上传到web服务器。后台使用java实现图片的接收和存储

    JSP上传图片并缩放裁切的程序

    内容索引:JSP源码,上传下载,图片裁切,JSP上传文件 版、JS版的图片裁切功能,但是没找到JAVA...它包括两部分,一部分上传图片,另一部分对图片进行处理,缩放并裁切。程序运行在JSP环境下,你需要配置好这种环境才行。

    WordPress腾讯云对象存储COS插件支持数据库定时备份、附件实时同步到COS、网站静态资源CDN加速等功能

    支持使用样式规则处理图片,例如:图片缩放、裁剪、格式转换等;支持使用高级压缩接口对图片进行压缩;支持盲水印的添加与提取;支持图片、主题CSS/JS等静态资源CDN加速;支持本地附件不保留,适用于应用空间不可写...

    富头像上传编辑器 v1.4

    强大的功能:原图支持本地上传、视频拍照和网络加载,图片编辑有缩放、裁剪、旋转、定位和调色等功能。 丰富的接口:可自定义头像(大小、数目...)、所有文本(包括其字体,大小,颜色,方便扩展多语言站点)、可在...

    Lerx 网站内容管理系统 v5.5.zip

    能获知图片的中央矩片后裁剪后并按照设定的尺寸进行缩放。能对指定栏目设定特定的裁剪宽度和高度。能对指定栏目下的文章设定原图上传。 16.★每个栏目可拥有独立的私有特定的HTML,可以无损后显示在栏目的显示页中...

    Lerx开源网站内容管理系统(CMS.ext)-其他

    能智能感知图片(包括JPG、PNG、GIF等格式)的中央矩片后裁剪后并按照设定的尺寸进行缩放。能对指定栏目设定特定的裁剪宽度和高度。能对指定栏目下的文章设定原图上传。20.每篇文章都各自拥有独立的调查模块,可以...

    MediaTool:基于JavaFX的视频处理图形化工具

    截图输入需要截图的分辨率和所需截取的图片数量,视频将随机截取所需的图片。 3.编单将所有扫描的视频导出一个编辑单Excel文件,并替换视频的父文件夹作为一个单独的工作表替换;替换合并工作表将所有视频放入一个...

Global site tag (gtag.js) - Google Analytics