由于項(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);
}
}