GraphicsMagick gm4java im4java
最近对使用Java对操作这方面问题进行了下调研, 随即写了个图片操作工具类, 包括图片的裁剪, 缩放, 移动, 旋转, 加水印, 后续待追加
- 首先有两个成熟的操作图片的工具库, 分别是GM 和 IM, 在安装了两者其一的基础上, 打开CMD, 执行相关的命令, 就可实现对图片的一些操作
- 然后在Java领域里, 就有封装好了的通过调用对应的类库, 底层再去调用上面两者的命令行执行, 进而实现图片操作, gm4java, im4java和jmagick都是这样的工具
- GM算是IM的分支, 但是与IM相比有几个优势, 其中最大的优点就是它的性能要好
-
gm4java本身比较简单, 就是一个执行器帮我们间接的去执行GM提供的一些命令, 但是它也提供了对im4java的支持!
…
现选择GM+gm4java实现图片的裁剪, 缩放, 拼合, 旋转, 移动功能, 然后在实现图片加水印的功能时一直行不通, 最后还是借用了im4java实现了, 后续有待改进
工具项目代码及测试用例见: commons
贴点测试代码:
package me.gavincook.commons.io;
import me.gavincook.commons.BaseTest;
import me.gavincook.commons.io.image.ImageUitl;
import org.testng.annotations.Test;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* @Auther Hinsteny
* @Desc
* @Date 2017-08-07
* @copyright: 2017 All rights reserved.
*/
public class ImagesTest extends BaseTest {
private static final String IMAGE_TYPE = ".jpg";
private static final String IMAGE_Folder = "images";
private static final String TEST_IMAGE = "togepi.jpg";
private String getImgSourcePath(String fileName) {
if (null == fileName || fileName.replace(" +", "").length() == 0)
fileName = UUID.randomUUID().toString() + IMAGE_TYPE;
String path = ImagesTest.this.getClass().getResource("").getPath();
fileName = path.concat(IMAGE_Folder).concat(File.separator).concat(fileName);
return System.getProperty("os.name").toLowerCase().indexOf("win") > -1 ? fileName.substring(1) : fileName;
}
/**
* 等比缩放图片用例
* @throws IOException
*/
@Test
public void testReSizeImage() throws IOException {
String sourceFilePath = getImgSourcePath(TEST_IMAGE);
ImageUitl.convertReSizeImage(300, 300, sourceFilePath, getImgSourcePath(null));
}
.....
}
欢迎大家到commons项目里提交Issues, 我们会添加更多实用的基础工具对象 O(∩_∩)O!