图像缩放是我们常常用到的一个操作,原理是数字图像处理的事,这里不管了。利用程序来讲原理很好理解。
第一:拿到原始图片的宽度和高度。
第二:根据缩放比例获得新图片的宽度和高度。
第三:用例原始图片的像素获得新的图片。
以下是完整的方法:
上面的方法有一点是需要解释的:缩放比例bo,可以整体的控制图片的缩放,不过也可以不按缩放,我们只要知道当前图片的宽度高度和原始图片的宽度和高度,就可以知道宽度和高度的缩放比例,既:
这样我就可以将图片缩放成任意的宽度和高度。但需要注意的是:[b]图片缩放会造成图像画质的下降,还有就是图片尺寸如果过大会出现内存溢出,这里关于能处理的图片的最大尺寸,建议在编程时要自己多注意,我个人觉得2200px*2200px以后出现内存溢出的可能性比较大[/b]。
附件是一个完成的可以运行的例子。运行时请将文件里的demo.jpg放在C盘下,或者您自己去修改程序里的图片路径,否则会出现空指针异常。
运行效果如下:
原始图片:
[img]http://www.kutoku.info/images/java/100815/demo1.png[/img]
缩放0.5倍:
[img]http://www.kutoku.info/images/java/100815/demo2.png[/img]
缩放2倍:
[img]http://www.kutoku.info/images/java/100815/demo3.png[/img]
文章地址:[url]http://javapub.iteye.com/blog/737703[/url]
相关文章
[b]Java图像图片 边缘检测[/b] [url]http://javapub.iteye.com/blog/685468[/url]
[b]Java图像变灰[/b] [url]http://javapub.iteye.com/blog/687082[/url]
[b]Java 给图片增加 水印图片 水印文字[/b] [url]Java 给图片增加 水印图片 水印文字[/url]
[b]Java图像渐变[/b] [url]http://javapub.iteye.com/blog/736799[/url]
第一:拿到原始图片的宽度和高度。
第二:根据缩放比例获得新图片的宽度和高度。
第三:用例原始图片的像素获得新的图片。
以下是完整的方法:
public final BufferedImage getResizePicture(BufferedImage originalPic,
double bo) {
// 获得原始图片的宽度。
int originalImageWidth = originalPic.getWidth();
// 获得原始图片的高度。
int originalImageHeight = originalPic.getHeight();
// 根据缩放比例获得处理后的图片宽度。
int changedImageWidth = (int) (originalImageWidth * bo);
// 根据缩放比例获得处理后的图片高度。
int changedImageHeight = (int) (originalImageHeight * bo);
// 生成处理后的图片存储空间。
BufferedImage changedImage = new BufferedImage(changedImageWidth,
changedImageHeight, BufferedImage.TYPE_3BYTE_BGR);
// double widthBo = (double) yourWidth / originalImageWidth;
// double heightBo = (double) yourHeightheight / originalImageHeight;
// 宽度缩放比例。
double widthBo = bo;
// 高度缩放比例。
double heightBo = bo;
AffineTransform transform = new AffineTransform();
transform.setToScale(widthBo, heightBo);
// 根据原始图片生成处理后的图片。
AffineTransformOp ato = new AffineTransformOp(transform, null);
ato.filter(originalPic, changedImage);
// 返回处理后的图片
return changedImage;
}
上面的方法有一点是需要解释的:缩放比例bo,可以整体的控制图片的缩放,不过也可以不按缩放,我们只要知道当前图片的宽度高度和原始图片的宽度和高度,就可以知道宽度和高度的缩放比例,既:
// double widthBo = (double) yourWidth / originalImageWidth;
// double heightBo = (double) yourHeightheight / originalImageHeight;
这样我就可以将图片缩放成任意的宽度和高度。但需要注意的是:[b]图片缩放会造成图像画质的下降,还有就是图片尺寸如果过大会出现内存溢出,这里关于能处理的图片的最大尺寸,建议在编程时要自己多注意,我个人觉得2200px*2200px以后出现内存溢出的可能性比较大[/b]。
附件是一个完成的可以运行的例子。运行时请将文件里的demo.jpg放在C盘下,或者您自己去修改程序里的图片路径,否则会出现空指针异常。
运行效果如下:
原始图片:
[img]http://www.kutoku.info/images/java/100815/demo1.png[/img]
缩放0.5倍:
[img]http://www.kutoku.info/images/java/100815/demo2.png[/img]
缩放2倍:
[img]http://www.kutoku.info/images/java/100815/demo3.png[/img]
文章地址:[url]http://javapub.iteye.com/blog/737703[/url]
相关文章
[b]Java图像图片 边缘检测[/b] [url]http://javapub.iteye.com/blog/685468[/url]
[b]Java图像变灰[/b] [url]http://javapub.iteye.com/blog/687082[/url]
[b]Java 给图片增加 水印图片 水印文字[/b] [url]Java 给图片增加 水印图片 水印文字[/url]
[b]Java图像渐变[/b] [url]http://javapub.iteye.com/blog/736799[/url]