`
zhuqiang5138
  • 浏览: 30568 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jmagick开发 备忘

 
阅读更多

 

1、为什么要使用jmagick,我大概是这么想的,因为jmagick是与服务器本地的ImageMagick配合使用的可以很好的

   处理图片较多的项目缩略图缩放问题,还有一些图片编辑功能的扩展。

2、配置

a)下载ImageMagick-6.6.2-9-Q16-windows-dll.exe并安装,安装后系统会自动在环境变量path中添加值

C:\Program Files\ImageMagick-6.6.2-Q16

b) jmagick.dll文件都拷到C:\WINDOWS\system32 

将文件jmagick.dll 拷到tomcatbin目录下 
jmagick.jar复制WEB-INFlib中, 
就可以了,看你的情况应该是你的tomcat的环境没有配置好的问题, 
再检查下吧 

3API可以参看

       http://downloads.jmagick.org/jmagick-doc/

下面举例讲解下代码的实现:

System.setProperty("jmagick.systemclassloader", "no");// 这个没什么好说的,照办就是了 

1、压缩图片

//该方法为将图片按比率高清压缩为150*120范围内的缩略图,在上传函数中调用。 
//
参数:filePath为上传图片的路径,toPath为压缩后图片的路径。 
public boolean scale(String filePath, String toPath) throws Exception { 
  System.setProperty("jmagick.systemclassloader","no"); 
  boolean sf = false; 
  ImageInfo info = null; 
  MagickImage image = null; 
  Dimension imageDim = null; 
  MagickImage scaled = null; 
  try { 
  info = new ImageInfo(filePath); 
  image = new MagickImage(info); 
  imageDim = image.getDimension(); 
  float width = imageDim.width; 
  float height = imageDim.height; 
  float bl = 1; 
  float bl_w = width / 150; 
  float bl_h = height / 120; 
  if (bl_w >= bl_h) { 
  bl = bl_w; 
  } 
  else { 
  bl = bl_h; 
  } 
  width = width / bl; 
  height = height / bl; 
  int new_width = (int) width; 
  int new_height = (int) height; 
  scaled = image.
scaleImage(new_width, new_height); 
  scaled.setFileName(toPath); 
  scaled.writeImage(info); 
  sf = true; 
  } 
  catch (Exception ex) { 
  sf = false; 
  } 
  finally { 
  if (scaled != null) { 
  scaled.destroyImages(); 
  } 
  } 
  return sf; 
} 
2
、改变背景色

ImageInfo info = null; 
MagickImage image = null; 
info = new ImageInfo(filePath); 
image = new MagickImage(info); 
image.setBackgroundColor(PixelPacket.queryColorDatabase("red")); 
image.
setBorderColor(PixelPacket.queryColorDatabase("green")); 
MagickImage borderedImage = image.borderImage(new Rectangle(0, 0, 10, 
* 20));

borderedImage.setFileName("D:/image/border.jpg"); 
borderedImage.writeImage(info); 

3、裁剪

Rectangle rect = new Rectangle(0, 0, 80, 40);

rect = new Rectangle(20, 20, 150, 120);

MagickImage cropped = image.cropImage(rect);

cropped.setFileName("D:/image/cropped.jpg"); 
cropped.writeImage(info); 

4、放大缩小

System.setProperty("jmagick.systemclassloader", "no");

        ImageInfo info;

        info = new ImageInfo(imgPath);

        image = new MagickImage(info);

        MagickImage scaled = image.zoomImage(toWidth, toHeight);

        scaled.setFileName(zoomPath);

scaled.writeImage(info);

 

5、旋转

  

   System.setProperty("jmagick.systemclassloader", "no");

         ImageInfo info = new ImageInfo();

          //这里不知道问什么我之前做的时候 用一个参数的构造函数 怎么也没用

         image = new MagickImage(info, bytes);

          //这里是需要旋转度数的

         rotate = image.rotateImage(angle);

          //返回一个字节流数组

   return rotate.imageToBlob(info);

 

 6、黑白(变灰)

  

   MagickImage image = null;

        System.setProperty("jmagick.systemclassloader", "no");

        ImageInfo info = new ImageInfo(fromFileStr);

        image = new MagickImage(info);

        image.imageToBlob(info);

        QuantizeInfo quantizeInfo = new QuantizeInfo();

        quantizeInfo.setColorspace(ColorspaceType.GRAYColorspace);

        image.quantizeImage(quantizeInfo);

        image.setFileName(saveToFileStr);

        image.writeImage(info);

 

7、还有很多的效果

 

// 绘制图片..把文件写在图片上面 
MagickImage blankImage = new MagickImage();

byte[] pixels = new byte[200 * 100 * 4];

for (int i = 0; i < 200 * 100; i++) {

pixels[4 * i] = (byte) 255;

pixels[4 * i + 1] = (byte) 255;

pixels[4 * i + 2] = (byte) 255;

pixels[4 * i + 3] = (byte) 0;

 } 
blankImage.constituteImage(200, 100, "RGBA", pixels); 
DrawInfo drawInfo = new DrawInfo(new ImageInfo());

drawInfo.setPrimitive("Rectangle 10 10 190 90"); drawInfo.setStroke(PixelPacket.queryColorDatabase("red")); 
drawInfo.setFill(PixelPacket.queryColorDatabase("white")); 
blankImage.drawImage(drawInfo); 
ImageInfo blankImageInfo = new ImageInfo();

DrawInfo annotateInfo = new 
DrawInfo(blankImageInfo);

annotateInfo.setOpacity(0); 
annotateInfo.setFont("fixed"); 
annotateInfo.setFill(PixelPacket.queryColorDatabase("green")); 
annotateInfo.setText("Wangxiaochen"); 
annotateInfo.setGeometry("+30+30"); 
blankImage.annotateImage(annotateInfo); 
blankImage.setFileName("D:/image/blank.jpg"); 
blankImage.writeImage(info); 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

//透明

blankImage.transparentImage( PixelPacket.queryColorDatabase("white"), 65535); 
blankImage.setFileName("D:/image/transparent.png"); 
blankImage.writeImage(info); 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

// 剪裁

Rectangle rect = new Rectangle(0, 0, 80, 40);

rect = new Rectangle(20, 20, 150, 120);

MagickImage cropped = image.cropImage(rect); cropped.setFileName("D:/image/cropped.jpg"); 
cropped.writeImage(info); 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

//磨尖

MagickImage sharpened = image.sharpenImage(1.0, 5.0); 
sharpened.setFileName("D:/image/sharpened.jpg"); 
sharpened.writeImage(info); 
// Despeckle image

MagickImage despeckled = image.despeckleImage(); 
despeckled.setFileName("D:/image/despeckled.jpg"); 
despeckled.writeImage(info); 
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

// Convolve image

double[] kernel = new double[9];

for (int i = 0; i < 9; i++) {

kernel[i] = 1.0;

}

kernel[4] = 2.0;

MagickImage convolvedImage = image.convolveImage(3, kernel); 
convolvedImage.setFileName("D:/image/convolved.jpg"); 
convolvedImage.writeImage(info); 

<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

起作用的都是MagickImage类里的一下方法

blurImage动感摸糊 
charcoalImage
变成木炭图 
edgeImage 
尖锐 
embossImage
浮雕 
flipImage
垂直翻转 
flopImage
水平翻转 
gaussianBlurImage
朦胧 
implodeImage
向内破裂 
magnifyImage
放大 
medianFilterImage
滤波 
minifyImage
缩小 
rotateImage(90.0);//
旋转 
shearImage(50.0, 10.0);//
缩放 
image.scaleImage(100, 80);
修剪 
montageImages(new MontageInfo(new ImageInfo()));
为图片加上边框 
oilPaintImage
油漆形象 
reduceNoiseImage
减少噪音形象 
rollImage
摆动 
sampleImage
调整宽和高 
scaleImage 
调整宽和高 
spreadImage
图片变散 
swirlImage
涡流 
unsharpMaskImage
锐化掩模图像 
waveImage
为图像加上毛边

zoomImage 变焦

 

分享到:
评论
2 楼 ge_cc 2011-10-24  
ge_cc 写道
//这里不知道问什么我之前做的时候 用一个参数的构造函数 怎么也没用
         image = new MagickImage(info, bytes);


一个参数的构造同不管用,想问下那个bytes是什么?
1 楼 ge_cc 2011-10-24  
//这里不知道问什么我之前做的时候 用一个参数的构造函数 怎么也没用
         image = new MagickImage(info, bytes);

相关推荐

Global site tag (gtag.js) - Google Analytics