GM是什么,上网查查,IM4java是什么,也请上网查。以下的介绍同样适合其他语言使用gm或是ImageMagick的安装和中文乱码的情况。ImageMagick也测试通过
1、下载如下,并全部解压(参见官方依赖下载地址ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates):
libpng-1.6.19.tar.gz 支持png格式
jpegsrc.v9.tar.gz支持Jpeg格式
ghostscript-9.15.tar.gz支持字体
GraphicsMagick-1.3.23.tar.gz主图片处理程序
freetype-2.6.2.tar.gz字体引擎
2、分别进入libpng、jpegsrc、freetype、ghostscript的解压目录,分别执行如下命令。
./configure
make
sudo make install
3、进入GraphicsMagick解压目录,执行如下命令。
./configure --prefix=/usr/local/GraphicsMagick-1.3.23 --with-quantum-depth=16 --enable-shared --enable-static --with-windows-font-dir=/Library/Fonts --with-gslib=no
make
make install
注:
--prefix:是指安装目录
--with-quantum-depth:指图色深,16位还是8位
--with-windows-font-dir:windows字体的安装目录
GraphicsMagick执行完第一条./configure命令后,最后会有如下的内容,注意其中的Ghostscript、JPEG v1、PNG、FreeType的Configured value部分都应该是yes或是有值,这样才能基本支持jpeg\png和字体。
Option Configure option Configured value
-----------------------------------------------------------------
Shared libraries --enable-shared=yes yes
Static libraries --enable-static=yes yes
GNU ld --with-gnu-ld=no no
Quantum depth --with-quantum-depth=16 16
Modules --with-modules=no no
Delegate Configuration:
BZLIB --with-bzlib=yes yes
DPS --with-dps=yes no
FlashPIX --with-fpx=no no
FreeType 2.0 --with-ttf=yes yes
Ghostscript None gs (unknown)
Ghostscript fonts --with-gs-font-dir=default none
Ghostscript lib --with-gslib=no no
JBIG --with-jbig=yes no
JPEG v1 --with-jpeg=yes yes
JPEG-2000 --with-jp2=yes no
LCMS v2 --with-lcms2=yes no
LZMA --with-lzma=yes no (failed tests)
Magick++ --with-magick-plus-plus=yes yes
PERL --with-perl=no no
PNG --with-png=yes yes (-lpng16)
TIFF --with-tiff=yes no
TRIO --with-trio=yes no
WEBP --with-webp=yes no
Windows fonts --with-windows-font-dir= none
WMF --with-wmf=yes no
X11 --with-x= no
XML --with-xml=yes yes
ZLIB --with-zlib=yes yes
X11 Configuration:
Not using X11.
Options used to compile and link:
CC = gcc
CFLAGS = -g -O2 -Wall -D_THREAD_SAFE
CPPFLAGS = -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/libxml2
CXX = g++
CXXFLAGS = -D_THREAD_SAFE
DEFS = -DHAVE_CONFIG_H
LDFLAGS =
LIBS = -ljpeg -lpng16 -lbz2 -lxml2 -lz -lm -lpthread
4、配置环境变量(对于java中im4java调用,以下配置无意义,所以此步也可省略):
export GMAGICK_HOME=/usr/local/GraphicsMagick-1.3.18
export PATH="$GMAGICK_HOME/bin:$PATH"
export IM4JAVA_TOOLPATH=$GMAGICK_HOME/bin/gm
5、终端中输入如下命令进行测试。
gm convert 111.jpg 222.png
gm convert 111.jpg -resize 100x100 out.jpg
gm convert -list formats
gm convert Arial -fill white -pointsize 24 -draw "text 10,15 'lifesinger 2006' " /Users/xxx/Documents/temp/2.png /Users/xxx/Documents/temp/2new.png
6、JAVA代码例子。
注:网上的文章针对中文乱码的原因解释大多都是错的,首先可确定是GM如上版本是肯定支持中文水印之类的,也不存在什么单数中文和双数中文支持的问题。并且还看到有人先用AWT生成透明底的水印图片,再把主图与这个水印图片用GM合并。别的不说,用awt与gm的这两方案性能比较一下,你就会发现是数量级的差别,就先不提图片质量和大小等。
关键是两点:
a.要使用中文字体,使用非中文字体会乱码。
b.GM只接收UTF-8的内容,否则乱码,所以传的值要UTF-8编码。你可以整个*.java文件设置为utf-8编码,也可以对传入的水印内容String转成uft-8编码。如以下例子的WaterMark.java文件即为utf-8编码。
import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
import org.im4java.process.Pipe;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class WaterMark {
public static void main(String[] args) throws Exception {
String src="/Users/xxx/Documents/temp/test/ban.jpg"; //需要加水印的源图片
String desc="/Users/xxx/Documents/temp/test/new/abc"; //生成的水印图片的路径
// String src1="/Users/xxx/Documents/temp/test/icon.jpg"; //需要加水印的源图片
// String desc1="/Users/xxx/Documents/temp/test/new/icon"; //生成的水印图片的路径
String content = "中文";
for (int i = 0; i < 10; i++) {
addImgText(src, content + i, desc + i + ".jpg");
}
// for (int i = 0; i < 1; i++) {
// addImgText(src1, content + i, desc1 + i + ".jpg");
// }
}
/**
* 给图片加水印
* @param srcPath 源图片路径
*/
public static void addImgText(String srcPath, String content, String desc) throws Exception {
IMOperation op = new IMOperation();
op.font("/Library/Fonts/Yuanti.ttc").gravity("southeast").pointsize(18).fill("#BCBFC8").draw("text 10,15 '" + content + "'").quality(90.0);
op.addImage();
op.addImage();
ConvertCmd cmd = new ConvertCmd(true);
cmd.setAsyncMode(true);
cmd.setSearchPath("/usr/local/GraphicsMagick-1.3.18/bin");// 如果是windows则需要设置convert路径
try {
cmd.run(op,srcPath,desc);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IM4JavaException e) {
e.printStackTrace();
}
}
}