Java imagemagick和GraphicsMagick使用

由于項(xiàng)目中要使用圖片合成,所以就用了imagemagick。因?yàn)楣ぷ麟娔X是mac,當(dāng)時(shí)安裝imagemagick時(shí)遇到了問(wèn)題,其實(shí)也不能說(shuō)是安裝imagemagick時(shí)遇到了問(wèn)題,主要是因?yàn)楫?dāng)時(shí)在網(wǎng)上找的說(shuō)是要安裝jmagic,所以在安裝jmagic事,遇到了問(wèn)題,結(jié)果從網(wǎng)上找的也解決不了。后來(lái)用了imagemagick+im4java問(wèn)題就解決了。具體操作如下:

第一種:1.brew install? imagemagick 2.? ./configure執(zhí)行。3.? make 4.make install 每一步都是直接輸入就行??梢杂妹?convert -version查看是否安裝成功。

這個(gè)安裝之后需要找到它的安裝地址,一般來(lái)說(shuō)地址都在/usr/local/Cellar/imagemagick/7.0.5-0/bin,我一開(kāi)始其實(shí)沒(méi)有到bin目錄下,但是就是因?yàn)檫@個(gè)bin所以耽誤了我好長(zhǎng)的時(shí)間。

第二種:我從官網(wǎng)上下載的imagemagick,解壓,進(jìn)入到根目錄下執(zhí)行上述 2、3、4命令。同樣用命令 convert -version查看是否安裝成功。

成功之后,其實(shí)就是寫(xiě)代買(mǎi)了,具體代買(mǎi)如下:(我也是網(wǎng)上找的,綜合起來(lái)的,就不在寫(xiě)具體地址了)

我用的是maven所以要引入pom依賴如下:

<dependency>

??? <groupId>org.im4java</groupId>

? <artifactId>im4java</artifactId>

? <version>1.4.0</version>

<dependency>

具體Java代碼如下:

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

import org.im4java.core.ConvertCmd;

import org.im4java.core.IM4JavaException;

import org.im4java.core.IMOperation;

public class Test {

public static String FROM = "/Users/song/Desktop/1.png";

public static String TOO = "/Users/song/Desktop/6.png";

public static String SAVE = "/Users/song/Desktop/8.png";

public static String TO = "/Users/song/Desktop/2.jpg";

public static String graphicsmagick = "/usr/local/Cellar/graphicsmagick/1.3.25/bin";

public static String IMAGEMAGICK = "/usr/local/Cellar/imagemagick/7.0.5-0/bin";

/**

* @param args

*/

public static void main(String[] args) {

// handlerImage(1000, 1000);

try {

// cutImage(FROM,TOO,20,20,50,50);

// addImgText(FROM);

maskCompositePic(SAVE, FROM, TO);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 圖片壓縮

* @param width

* @param height

*/

public static void handlerImage(int width, int height) {

ConvertCmd cmd = new ConvertCmd(false); // true表示使用GraphicsMagick

// ,false表示使用ImageMagick

cmd.setSearchPath(IMAGEMAGICK);// 設(shè)置"/usr/local/Cellar/graphicsmagick/1.3.25/bin"

// GraphicsMagick的bin目錄

// create the operation, add images and operators/options

IMOperation op = new IMOperation();

op.addImage(FROM);

op.resize(150, 150);

op.addImage(TO);

try {

cmd.run(op);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

*

* 根據(jù)坐標(biāo)裁剪圖片

*

* @param srcPath

*? ? ? ? ? ? 要裁剪圖片的路徑

* @param newPath

*? ? ? ? ? ? 裁剪圖片后的路徑

* @param x

*? ? ? ? ? ? 起始橫坐標(biāo)

* @param y

*? ? ? ? ? ? 起始縱坐標(biāo)

* @param x1

*? ? ? ? ? ? 結(jié)束橫坐標(biāo)

* @param y1

*? ? ? ? ? ? 結(jié)束縱坐標(biāo)

*/

public static void cutImage(String srcPath, String newPath, int x, int y, int x1, int y1) throws Exception {

int width = x1 - x;

int height = y1 - y;

IMOperation op = new IMOperation();

op.addImage(srcPath);

/**

* width: 裁剪的寬度 height: 裁剪的高度 x: 裁剪的橫坐標(biāo) y: 裁剪的挫坐標(biāo)

*/

op.crop(width, height, x, y);

op.addImage(newPath);

ConvertCmd convert = new ConvertCmd();

convert.setSearchPath(IMAGEMAGICK);

convert.run(op);

}

/**

* 給圖片加水印

*

* @param srcPath

*? ? ? ? ? ? 源圖片路徑

*/

public static void addImgText(String srcPath) throws Exception {

IMOperation op = new IMOperation();

op.font("宋體").gravity("southeast").pointsize(18).fill("#BCBFC8").draw("text 5,5 juziku.com");

op.addImage();

op.addImage();

ConvertCmd convert = new ConvertCmd();

convert.setSearchPath(IMAGEMAGICK);

convert.run(op, srcPath, srcPath);

}

/**

* 生成蒙板和圖片的合成圖 合成圖的大小以蒙版大小為標(biāo)準(zhǔn),且原圖必須要與蒙版大小一致 合成該圖片的命令: convert 蒙板圖 -compose

* atop 原圖 -geometry 大小和坐標(biāo) -composite 生成圖片

*

* @param desPath

*? ? ? ? ? ? 生成的合成圖的保存路徑

* @param srcPath

*? ? ? ? ? ? 合成圖

* @throws IOException

* @throws InterruptedException

* @throws IM4JavaException

*/

public static void maskCompositePic(String desPath, String originalPic, String maskPic)

throws IOException, InterruptedException, IM4JavaException {

// 獲取圖片的寬高

BufferedImage bi = ImageIO.read(new File(maskPic));

int width = bi.getWidth();

int height = bi.getHeight();

IMOperation op = new IMOperation();

op.addImage(originalPic);

op.compose("atop");

op.addImage(maskPic);

op.geometry(width, height, 0, 0);

op.composite();

op.addImage(desPath);

ConvertCmd cmd = new ConvertCmd();

cmd.setSearchPath(IMAGEMAGICK);

cmd.run(op);

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,632評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,740評(píng)論 18 399
  • 一、 1、請(qǐng)用Java寫(xiě)一個(gè)冒泡排序方法 【參考答案】 public static void Bubble(int...
    獨(dú)云閱讀 1,500評(píng)論 0 6
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,927評(píng)論 0 33
  • 你是山水世間的詩(shī)句 日日等待我的經(jīng)過(guò) 等待我的吟游 我偏偏獨(dú)漏你這一句 因?yàn)槲抑?我?guī)Р蛔吣?你是我無(wú)人問(wèn)津的深...
    阿勇阿勇閱讀 155評(píng)論 0 0

友情鏈接更多精彩內(nèi)容