im4java+ImageMagick/GraphicsMagick

本文介绍如何使用im4java库进行图片缩放操作,并提供了一个示例代码,展示了如何利用ImageMagick或GraphicsMagick进行图片尺寸调整。文章还详细说明了配置环境变量及解决常见错误的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

im4java的jar包可以在maven库中找到。

		<dependency>
			<groupId>org.im4java</groupId>
			<artifactId>im4java</artifactId>
      		<version>1.4.0</version> 
		</dependency>

将ImageMagick或者GraphicsMagick安装好后,再配好环境变量。

样例代码:

import org.im4java.core.ConvertCmd;
import org.im4java.core.IMOperation;

public class Test {

	public static void main(String[] args) {
		try {
			zoomImage(1000,800,"F:/u02/origin/20141215/loginbigbg.jpg","F:/u02/origin/20141215/loginbigbg_new.jpg");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void zoomImage(Integer width, Integer height, String srcPath, String newPath) throws Exception {    
        IMOperation op = new IMOperation();    
        op.addImage(srcPath);
        if(width == null){//根据高度缩放图片  
            op.resize(null, height);      
        }else if(height == null){//根据宽度缩放图片  
            op.resize(width, null);  
        }else {  
            op.resize(width, height);  
        }
        op.addImage(newPath);
        //这里不加参数或者参数为false是使用ImageMagick,true是使用GraphicsMagick
        ConvertCmd convert = new ConvertCmd();
//        convert.setSearchPath("g:/tool/graphicsmagick-1.3.20-q16");
        convert.setSearchPath("G:/tool/ImageMagick-6.9.0-Q16");
        convert.run(op);    
    }
}
其中setSearchPath在Windows环境下是需要设置的。

ConvertCmd convert = new ConvertCmd();
这一句,如果只安装了ImageMagick,但是定义时写成了new ConvertCmd(true)是,会报找不到“gm”的错。

org.im4java.core.CommandException: java.io.FileNotFoundException: gm
	at org.im4java.core.ImageCommand.run(ImageCommand.java:219)
	at com.trs.rk.test.Test.zoomImage(Test.java:31)
	at com.trs.rk.test.Test.main(Test.java:10)

同理,如果只装了GraphicsMagick,但是new ConvertCmd(false)或者无参数,会报找不到convert的错。

org.im4java.core.CommandException: java.io.FileNotFoundException: convert
	at org.im4java.core.ImageCommand.run(ImageCommand.java:219)
	at com.trs.rk.test.Test.zoomImage(Test.java:31)
	at com.trs.rk.test.Test.main(Test.java:10)





Im4Java是一个用于Java应用程序的ImageMagick库的绑定,它提供了一种简单的方式来操作图像文件,括格式转换。通过Im4Java,你可以将图片从一种格式流式地转换成另一种格式,比如从PNG转换成JPG,而无需先保存到磁盘然后再读取。 以下是一个简单的示例,演示如何使用Im4Java在线程安全地进行格式转换: ```java import com.levigo.jbig2.jpeg.JpegImageReader; import com.levigo.jbig2.jpeg.JpegImageWriter; import com.levigo.imagetools.ImageInfo; import com.levigo.imagetools.format.jpeg.JpegFormat; import javax.imageio.stream.MemoryCacheImageInputStream; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; public class ImageConverter { public byte[] convertToJpg(byte[] input, String inputFileExtension) throws IOException { BufferedImage bufferedImage = ImageIO.read(new MemoryCacheImageInputStream(new ByteArrayInputStream(input))); JpegFormat jpegFormat = new JpegFormat(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try (JpegImageWriter writer = JpegImageWriter.createJPEGWriter(outputStream)) { ImageInfo imageInfo = ImageInfo.fromBufferedImage(bufferedImage); writer.write(bufferedImage, imageInfo, jpegFormat); } return outputStream.toByteArray(); } } ``` 在这个例子中,你需要首先创建一个`ImageConverter`实例,然后传入原始图片的数据和输入的文件扩展名(如".png"),函数会返回转换后的JPG格式的字节数组。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值