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依賴(lài)如下:

<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)系作者
  • 序言:七十年代末糟描,一起剝皮案震驚了整個(gè)濱河市怀喉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌船响,老刑警劉巖躬拢,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異见间,居然都是意外死亡聊闯,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)米诉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菱蔬,“玉大人,你說(shuō)我怎么就攤上這事史侣∷┟冢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵惊橱,是天一觀的道長(zhǎng)蚪腐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)税朴,這世上最難降的妖魔是什么削茁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任宙枷,我火速辦了婚禮,結(jié)果婚禮上茧跋,老公的妹妹穿的比我還像新娘慰丛。我一直安慰自己,他們只是感情好瘾杭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布诅病。 她就那樣靜靜地躺著,像睡著了一般粥烁。 火紅的嫁衣襯著肌膚如雪贤笆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天讨阻,我揣著相機(jī)與錄音芥永,去河邊找鬼。 笑死钝吮,一個(gè)胖子當(dāng)著我的面吹牛埋涧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奇瘦,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棘催,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了耳标?” 一聲冷哼從身側(cè)響起醇坝,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎次坡,沒(méi)想到半個(gè)月后呼猪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砸琅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年郑叠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片明棍。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乡革,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摊腋,到底是詐尸還是另有隱情沸版,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布兴蒸,位于F島的核電站视粮,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏橙凳。R本人自食惡果不足惜蕾殴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一笑撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钓觉,春花似錦茴肥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至批幌,卻和暖如春础锐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荧缘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工皆警, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人截粗。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓信姓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親桐愉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子财破,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

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