明天的明天的明天

          用鍵盤改變生活

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            17 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks
          ImageMagick, JMagick安裝、配置及使用:
          平臺:winXP
          1. 安裝ImageMagick(ImageMagick website:http://www.imagemagick.org/script/index.php)
              下載并安裝ImageMagick。file name: ImageMagick-6.2.6-8-Q16-windows-dll.exe
               download address: http://prdownloads.sourceforge.net/imagemagick/ImageMagick-6.2.6-8-Q16-windows-dll.exe?download
              安裝成功后,把install path加入系統path,以便能調用dll.如C:\Program Files\ImageMagick-6.2.6-Q16
          2. 安裝JMagick(JMagick website: http://www.yeo.id.au/jmagick/
              下載JMatick。file name: jmagick-6.2.6-win.zip
              download address: http://www.yeo.id.au/jmagick/quickload/win-6.2.6/jmagick-6.2.6-win.zip
              解壓后把jmagick-6.2.6-win\jar\jmagick.jar copy到項目的WEB-INF\lib目錄下,把jmagick-6.2.6-win\q16\jmagick.dll copy 到c:\windows\system32目錄下。
          3. 程序參考:
             JMagickScale.java 實現圖片縮略圖
          ------------------------------------------------------------------
          package images;
          import magick.ImageInfo;
          import magick.MagickException;
          import magick.MagickImage;
          public class JMagickScale {
           /**
            * Description:
            * @param args
            * @throws MagickException
            */
           public static void main(String[] args) throws MagickException {
            System.setProperty("jmagick.systemclassloader","no");
           
            //reading image
            ImageInfo info = new ImageInfo("c:/image4.bmp");
            MagickImage image = new MagickImage(info);
           
            //resize image
            MagickImage scaleImg = image.scaleImage(95, 80);
           
            //write image to file
            scaleImg.setFileName("c:/MyFile4.bmp");
            scaleImg.writeImage(info);
           }
          }
           JMagickTest.java 實現圖片的各種操作示例,如旋轉,加邊框,設置背景,提升質量,加蓋文字說明等等...
          -----------------------------------------------------------------------------------------------------------------------------
          package images;
          import java.awt.Dimension;
          import java.awt.Rectangle;
          import magick.ImageInfo;
          import magick.MagickImage;
          import magick.MagickException;
          import magick.QuantizeInfo;
          import magick.ColorspaceType;
          import magick.MagickApiException;
          import magick.PixelPacket;
          import magick.DrawInfo;
          import magick.ResolutionType;
          import magick.ProfileInfo;
          import magick.MontageInfo;
          import magick.Magick;
          import magick.MagickInfo;
          import java.io.IOException;
          import java.io.FileOutputStream;
          /**
           * For testing JMagick functions.
           *
           * @author Eric Yeo
           */
          public class JMagickTest {
              /**
               * Display the information about the profile supplied.
               *
               * @param profile
               *            the profile for which to display
               */
              private static void displayProfile(ProfileInfo profile) {
                  if (profile.getName() == null) {
                      System.out.println("Profile name is null");
                  }
                  else {
                      System.out.println("Profile name is " + profile.getName());
                  }
                  if (profile.getInfo() == null) {
                      System.out.println("No profile info");
                  }
                  else {
                      System.out.println("Profile length is " + profile.getInfo().length);
                  }
              }
              public static void main(String[] args) {
                  try {
                      Rectangle rect = new Rectangle(0, 0, 80, 40);
                      int flags = Magick.parseImageGeometry("60x50", rect);
                      System.out.println("Scaled to " + rect.width + "x" + rect.height);
                      // Copy an image.
                      ImageInfo info = new ImageInfo("pics.jpg");
                      info.setPage("50x50+0+0");
                      info.setUnits(ResolutionType.PixelsPerInchResolution);
                      info.setColorspace(ColorspaceType.RGBColorspace);
                      info.setBorderColor(PixelPacket.queryColorDatabase("red"));
                      info.setDepth(8);
                      System.out.println("Depth "+info.getDepth());
                      info.setDepth(0);
                      MagickImage image = new MagickImage(info);
                      image.setImageAttribute("Comment", "Processed by JMagick");
                      System.out.println("Quality is "+image.getQuality());
                      System.out.println("Colorspace is " + image.getColorspace());
                      System.out.println("Resolution units is " + image.getUnits());
                      System.out.println("X resolution is " + image.getXResolution());
                      System.out.println("Y resolution is " + image.getYResolution());
                      System.out.println("Size blob is " + image.sizeBlob());
                      System.out.println("Colors " + image.getColors());
                      System.out.println("Total colors " + image.getTotalColors());
                      System.out.println("Depth is "+image.getDepth());
                      image.signatureImage();
                      image.setFileName("copy.jpg");
                      image.writeImage(info);
                      // Background Color
                      System.out.println("Old colour " + image.getBackgroundColor());
                      image.setBackgroundColor(PixelPacket.queryColorDatabase("red"));
                      System.out.println("New colour " + image.getBackgroundColor());
                      // Border image
                      image.setBorderColor(PixelPacket.queryColorDatabase("green"));
                      MagickImage borderedImage = image.borderImage(new Rectangle(0, 0,
                              10, 20));
                      borderedImage.setFileName("border.jpg");
                      borderedImage.writeImage(info);
                      // Raise image
                      MagickImage raisedImage = new MagickImage(new ImageInfo("pics.jpg"));
                      raisedImage.raiseImage(new Rectangle(0, 0, 10, 20), true);
                      raisedImage.setFileName("raised.jpg");
                      raisedImage.writeImage(info);
                      // Profile test
                      System.out.println("Number of generic profiles "
                              + image.getGenericProfileCount());
                      displayProfile(image.getColorProfile());
                      image.setColorProfile(new ProfileInfo());
                      displayProfile(image.getColorProfile());
                      image.setColorProfile(new ProfileInfo("Test", new byte[20]));
                      displayProfile(image.getColorProfile());
                      // Montage test
                      MagickImage images[] = new MagickImage[2];
                      images[0] = image;
                      images[1] = image;
                      MagickImage seqImage = new MagickImage(images);
                      MontageInfo montageInfo = new MontageInfo(new ImageInfo());
                      montageInfo.setFileName("montage.jpg");
                      montageInfo.setTitle("Melbourne");
                      montageInfo.setBorderWidth(5);
                      MagickImage montage = seqImage.montageImages(montageInfo);
                      montage.writeImage(new ImageInfo());
                     
                      // Converting the montage into a blob
                      montage.setMagick("JPG");
                      byte[] mblob = montage.imageToBlob(new ImageInfo());
                      System.out.println("Length "+mblob.length);
                      // Test average
                      MagickImage average = seqImage.averageImages();
                      average.setFileName("average.jpg");
                      average.writeImage(new ImageInfo());
                      // Image to blob
                      info = new ImageInfo();
                      byte[] blob = image.imageToBlob(info);
                      // Blob to image
                      info = new ImageInfo();
                      MagickImage blobImage = new MagickImage(info, blob);
                      Dimension imageDim = blobImage.getDimension();
                      System.out.println("Blob width is " + imageDim.width);
                      System.out.println("Blob heght is " + imageDim.height);
                      System.out.println(imageDim);
                      blobImage.setFileName("blob.jpg");
                      blobImage.writeImage(info);
                      // JPEG Image to GIF blob
                      image.setMagick("GIF");
                      blob = image.imageToBlob(info);
                      try {
                          FileOutputStream out = new FileOutputStream("blob.gif");
                          out.write(blob);
                          out.close();
                      }
                      catch (IOException ex) {
                          System.out.println("Unable to write blob to file: " + ex);
                      }
                      // Rotation and shear
                      image = new MagickImage(new ImageInfo("pics.jpg"));
                      MagickImage rotated = image.rotateImage(45.0);
                      rotated.setFileName("rotated.jpg");
                      rotated.writeImage(info);
                      MagickImage sheared = image.shearImage(50.0, 10.0);
                      sheared.setFileName("sheared.jpg");
                      sheared.writeImage(info);
                      MagickImage scaled = image.scaleImage(100, 80);
                      scaled.setFileName("scaled.jpg");
                      scaled.writeImage(info);
                      // Cloning
                      imageDim = image.getDimension();
                      System.out.println("Width is " + imageDim.width);
                      System.out.println("Height is " + imageDim.height);
                      System.out.println("Depth is " + image.getDepth());
                      System.out.println("Storage class is " + image.getStorageClass());
                      System.out.println("Comment is \""
                              + image.getImageAttribute("Comment") + "\"");
                      MagickImage clonedImage = image.cloneImage(0, 0, false);
                      clonedImage.setFileName("clone.jpg");
                      clonedImage.writeImage(info);
                      // Quantization
                      MagickImage quantizedImage = new MagickImage(new ImageInfo(
                              "pics.jpg"));
                      QuantizeInfo quantizeInfo = new QuantizeInfo();
                      quantizeInfo.setColorspace(ColorspaceType.GRAYColorspace);
                      quantizeInfo.setNumberColors(256);
                      quantizeInfo.setTreeDepth(4);
                      System.out.println("QuantizeImage "
                              + quantizedImage.quantizeImage(quantizeInfo));
                      System.out.println("Colors " + quantizedImage.getColors());
                      System.out.println("Total colors "
                              + quantizedImage.getTotalColors());
                      quantizedImage.setFileName("quantized.png");
                      quantizedImage.writeImage(info);
          //            for (int i = 0; i < quantizedImage.getColors(); i++) {
          //                PixelPacket pp = quantizedImage.getColormap(i);
          //                System.out.println("Colormap[" + i + "] = (" + pp.getRed()
          //                        + ", " + pp.getGreen() + ", " + pp.getBlue() + ")");
          //            }
          //            PixelPacket[] ppArray = quantizedImage.getColormap();
          //            for (int i = 0; i < quantizedImage.getColors(); i++) {
          //                System.out.println("Colormap2[" + i + "] = ("
          //                        + ppArray[i].getRed() + ", " + ppArray[i].getGreen()
          //                        + ", " + ppArray[i].getBlue() + ")");
          //            }
                      // Create an image from scratch
                      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);
                      // Put a red rectangle around the border
                      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);
                      // Annotate the image with a green Hello
                      ImageInfo blankImageInfo = new ImageInfo();
                      DrawInfo annotateInfo = new DrawInfo(blankImageInfo);
                      annotateInfo.setOpacity(0);
                      annotateInfo.setFont("fixed");
                      annotateInfo.setFill(PixelPacket.queryColorDatabase("green"));
                      annotateInfo.setText("Hello");
                      annotateInfo.setGeometry("+30+30");
                      blankImage.annotateImage(annotateInfo);
                      blankImage.setFileName("blank.jpg");
                      blankImage.writeImage(info);
                      // Make the white page of the image transparent
                      blankImage.transparentImage(
                              PixelPacket.queryColorDatabase("white"), 65535);
                      blankImage.setFileName("transparent.png");
                      blankImage.writeImage(info);
                      // Crop image
                      rect = new Rectangle(20, 20, 150, 120);
                      MagickImage cropped = image.cropImage(rect);
                      cropped.setFileName("cropped.jpg");
                      cropped.writeImage(info);
                      // Chop image
                      rect = new Rectangle(0, 0, 150, 120);
                      MagickImage chopped = image.chopImage(rect);
                      chopped.setFileName("chopped.jpg");
                      chopped.writeImage(info);
                      // Sharpen image
                      MagickImage sharpened = image.sharpenImage(1.0, 5.0);
                      sharpened.setFileName("sharpened.jpg");
                      sharpened.writeImage(info);
                      // Despeckle image
                      MagickImage despeckled = image.despeckleImage();
                      despeckled.setFileName("despeckled.jpg");
                      despeckled.writeImage(info);
                      // 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("convolved.jpg");
                      convolvedImage.writeImage(info);
                      // Finally display the image.
                      MagickWindow window = new MagickWindow(image);
                      window.setVisible(true);
                      // MagickInfo test
                      MagickInfo minfo = new MagickInfo("JPEG");
                      System.out.println("JPG description: " + minfo.getDescription());
                  }
                  catch (MagickApiException ex) {
                      System.err.println("MagickException: " + ex + ": " + ex.getReason()
                              + ", " + ex.getDescription());
                  }
                  catch (MagickException ex) {
                      System.err.println("MagickException: " + ex);
                  }
              }
          }
           
          MagickWindow.java  在java.awt組件中顯示
          -----------------------------------------------------------------------------------------------------------------------
          package images;
          import java.awt.Dimension;
          import java.awt.Frame;
          import java.awt.event.WindowAdapter;
          import java.awt.event.WindowEvent;
          import magick.MagickImage;
          import magick.util.MagickViewer;
          /**
           * This class implements a window that displays a MagickImage.
           *
           * @author Eric Yeo
           */
          public class MagickWindow extends Frame {
              /**
               * A listener that exits the application when we receive
               * the window closing event.
               */
              private final class MyListener extends WindowAdapter {
           /**
            * This method is called when the window closes.
            */
           public void windowClosing(WindowEvent event)
           {
               System.exit(0);
           }
              }
              /**
               * We want the window size to be this big.
               */
              public Dimension getPreferredSize() {
           return new Dimension(250, 200);
              }
              /**
               * We want the window size to be at this minimum.
               */
              public Dimension getMinimumSize() {
           return new Dimension(300, 200);
              }
           
              /**
               * Constructor.
               */
              public MagickWindow(MagickImage image)
              {
           setResizable(true);
           addWindowListener(new MyListener());
           MagickViewer imageViewer = new MagickViewer();
           add(imageViewer, "Center");
           
           setTitle("Magick Window");
           pack();
           imageViewer.setImage(image);
              }
          }

           
          posted on 2007-09-17 12:51 Endless 閱讀(3432) 評論(2)  編輯  收藏

          Feedback

          # re: 【轉】ImageMagick, JMagick安裝、配置及使用[未登錄] 2008-12-08 17:02 dawei
          請問 給圖片加上中文 ,你有沒有做過
          可以交流一下嗎?
          447279669
          謝謝  回復  更多評論
            

          # re: 【轉】ImageMagick, JMagick安裝、配置及使用 2011-03-08 14:23 fengbr0
          請問為什么只有圖片的縮小而沒有放大。這個能實現伐?  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 鄂州市| 阿拉善盟| 如东县| 宣化县| 密山市| 乌兰察布市| 连州市| 诸城市| 嘉定区| 济宁市| 靖江市| 阿拉善左旗| 台湾省| 浦县| 海兴县| 涿鹿县| 乐陵市| 时尚| 南丰县| 阿坝| 平阳县| 苗栗市| 巴林右旗| 富源县| 新闻| 长白| 宁国市| 荆门市| 巫溪县| 汝城县| 高台县| 黄大仙区| 西藏| 木里| 平罗县| 晴隆县| 灌阳县| 大连市| 商南县| 定陶县| 伽师县|