JMagick示例

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);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值