void

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(008040);
            
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(00,
                    
1020));
            borderedImage.setFileName(
"border.jpg");
            borderedImage.writeImage(info);
            
// Raise image
            MagickImage raisedImage = new MagickImage(new ImageInfo("pics.jpg"));
            raisedImage.raiseImage(
new Rectangle(001020), 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.010.0);
            sheared.setFileName(
"sheared.jpg");
            sheared.writeImage(info);
            MagickImage scaled 
= image.scaleImage(10080);
            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(00false);
            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] = (byte255;
                pixels[
4 * i + 1= (byte255;
                pixels[
4 * i + 2= (byte255;
                pixels[
4 * i + 3= (byte0;
            }
            blankImage.constituteImage(
200100"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(2020150120);
            MagickImage cropped 
= image.cropImage(rect);
            cropped.setFileName(
"cropped.jpg");
            cropped.writeImage(info);
            
// Chop image
            rect = new Rectangle(00150120);
            MagickImage chopped 
= image.chopImage(rect);
            chopped.setFileName(
"chopped.jpg");
            chopped.writeImage(info);
            
// Sharpen image
            MagickImage sharpened = image.sharpenImage(1.05.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(250200);
    }
    
/**
     * We want the window size to be at this minimum.
     
*/
    
public Dimension getMinimumSize() {
        return new Dimension(300200);
    }

    
/**
     * 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 2008-07-19 12:15 void 阅读(1395) 评论(2)  编辑  收藏 所属分类: Jmagick

Feedback

# re: JMagick示例 2010-06-18 11:24 lacewigs

really enjoyed the quality information you offer to your visitors. Thanks  回复  更多评论   

# re: JMagick示例[未登录] 2011-09-16 12:00 胡波

请问 我旋转图片后 设置图片背景为透明 结果图片边缘有锯齿效果..请问怎么解决  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: