GraphicsMagick 实现图片的裁剪, 旋转, 移动

时间:2022-07-27 10:14:07

GraphicsMagick gm4java im4java

最近对使用Java对操作这方面问题进行了下调研, 随即写了个图片操作工具类, 包括图片的裁剪, 缩放, 移动, 旋转, 加水印, 后续待追加

  • 首先有两个成熟的操作图片的工具库, 分别是GMIM, 在安装了两者其一的基础上, 打开CMD, 执行相关的命令, 就可实现对图片的一些操作
  • 然后在Java领域里, 就有封装好了的通过调用对应的类库, 底层再去调用上面两者的命令行执行, 进而实现图片操作, gm4java, im4javajmagick都是这样的工具
  • 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!