Java图片处理 - 缩放图片
Java原生代码实现缩放图片
上一章原生代码中执行测试代码:
public static void main(String[] args) {
/*这儿填写你存放要缩小图片的文件夹全地址*/
String src = "C:/test2.jpg" ;
/*这儿填写你转化后的图片存放的文件夹*/
String tar = "C:/test2_width_200.jpg";
/* 根据宽度缩放 */
ImageUtil.widthCutting(src, tar, 200);
}
具体实现可以看一下以下代码:
/* 原始图像的宽度和高度 */
int width = im.getWidth();
int height = im.getHeight();
//计算压缩比例
float resizeTimes = (float)targetWidth / (float)width;
BigDecimal bd = new BigDecimal((double)resizeTimes);
// (1:小数点位数, 4:表示四舍五入,可以选择其他舍值方式,例如去尾等等.
bd = bd.setScale(1 ,4);
resizeTimes = bd.floatValue();
/* 调整后的图片的宽度和高度 - 按照压缩比例计算出新的宽度和高度 */
int toWidth = (int) (width * resizeTimes);
int toHeight = (int) (height * resizeTimes);
/* 新生成结果图片 */
result = new BufferedImage(toWidth, toHeight, BufferedImage.TYPE_INT_RGB);
result.getGraphics().drawImage( im.getScaledInstance(toWidth, toHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);
最核心的是将图片按比例进行缩小,如果你只想缩小50%,那么你就可以直接将resizeTimes设置成0.5f
,然后去计算最终宽高。
使用im4java调用ImageMagick缩放图片
上面的一堆计算是不是很麻烦,其实有更简单的方式,就是用im4java调用第三方库实现,处理跟方便
测试代码:
public static void main(String[] args) throws Exception {
String src = "c:/test2.jpg";
String target = "c:/test2_70_ratio.jpg";
resizeImage(src, target, "70%");
System.out.println("完成");
}
/**
* 改变图片大小比例
* @param path 原文件路径
* @param des 目标文件路径
* @param ratio 缩放比例
* @throws Exception
*/
public static void resizeImage(String path, String des, String ratio) throws Exception {
// 创建目标文件
createDirectory(des);
IMOperation op = new IMOperation();
op.addImage(path);
op.addRawArgs(ratio);
op.addImage(des);
ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");
cmd.run(op);
}
大家还可以参考我专栏中的其他文章:
(1)Java图片处理 - 安装ImageMagick库使用convert命令
(2)Java图片处理 - 创建工具类
(3)Java图片处理 - 复制
(4)Java图片处理 - 缩放图片
(5)Java图片处理 - gif图获取一帧图片