使用JMagick为图片打水印

  1. 为了保护图片的版权,我们经常需要在上传的照片上打上版权信息或图标,下面介绍利用JMagick在图片上做标记。引入JMagick需要的类库:
        
        
        
        
    view plain print ?
    1. import java.awt.Dimension;  
    2. import java.awt.Rectangle;  
    3.   
    4. import magick.CompositeOperator;  
    5. import magick.ImageInfo;  
    6. import magick.MagickException;  
    7. import magick.MagickImage;  
    import java.awt.Dimension; import java.awt.Rectangle; import magick.CompositeOperator; import magick.ImageInfo; import magick.MagickException; import magick.MagickImage;
  2. 下面介绍如何使用JMagick做标记:
        
        
        
        
    view plain print ?
    1. public static void mask(String logoPath, String srcPathName, String destPathName, int location, int scale) throws MagickException {  
    2.   int width = getWidth(srcPathName);  
    3.   int height = getHeight(srcPathName);  
    4.   int x = 0, y = 0;  
    5.   int w, h;  
    6.   w = scale * 70 / 100;  
    7.   h = scale * 65 / 100;  
    8.   boolean lc = true;  
    9.   if (width < height) {  
    10.     switch (location) {  
    11.       case 0:  
    12.         lc = false;  
    13.         break;  
    14.       case 1:  
    15.         x = width / 4 - w;  
    16.         y = height / 8 - h / 2;  
    17.         break;  
    18.       case 2:  
    19.         x = width / 2 - w;  
    20.         y = height / 8 - h / 2;  
    21.         break;  
    22.       case 3:  
    23.         x = width * 3 / 4 - w;  
    24.         y = height / 8 - h / 2;  
    25.         break;  
    26.       case 4:  
    27.         x = width / 4 - w;  
    28.         y = height / 2 - h / 2;  
    29.         break;  
    30.       case 5:  
    31.         x = width / 2 - w;  
    32.         y = height / 2 - h / 2;  
    33.         break;  
    34.       case 6:  
    35.         x = width * 3 / 4 - w;  
    36.         y = height / 2 - h / 2;  
    37.         break;  
    38.       case 7:  
    39.         x = width / 4 - w;  
    40.         y = height * 7 / 8 - h / 2;  
    41.         break;  
    42.       case 8:  
    43.         x = width / 2 - w;  
    44.         y = height * 7 / 8 - h / 2;  
    45.         break;  
    46.       case 9:  
    47.         x = width * 3 / 4 - w;  
    48.         y = height * 7 / 8 - h / 2;  
    49.         break;  
    50.     }  
    51.   } else {  
    52.     switch (location) {  
    53.       case 0:  
    54.         lc = false;  
    55.         break;  
    56.       case 1:  
    57.         x = width / 7 - w;  
    58.         y = height / 6 - h / 2;  
    59.         break;  
    60.       case 2:  
    61.         x = width / 2 - w;  
    62.         y = height / 6 - h / 2;  
    63.         break;  
    64.       case 3:  
    65.         x = width * 6 / 7 - w;  
    66.         y = height / 6 - h / 2;  
    67.         break;  
    68.       case 4:  
    69.         x = width / 7 - w;  
    70.         y = height / 2 - h / 2;  
    71.         break;  
    72.       case 5:  
    73.         x = width / 2 - w;  
    74.         y = height / 2 - h / 2;  
    75.         break;  
    76.       case 6:  
    77.         x = width * 6 / 7 - w;  
    78.         y = height / 2 - h / 2;  
    79.         break;  
    80.       case 7:  
    81.         x = width / 7 - w;  
    82.         y = height * 5 / 6 - h / 2;  
    83.         break;  
    84.       case 8:  
    85.         x = width / 2 - w;  
    86.         y = height * 5 / 6 - h / 2;  
    87.         break;  
    88.       case 9:  
    89.         x = width * 6 / 7 - w;  
    90.         y = height * 5 / 6 - h / 2;  
    91.         break;  
    92.     }  
    93.   }  
    94.   if (x < 10) {  
    95.     x = 10;  
    96.   }  
    97.   if (x + w * 2 + 10 > width) {  
    98.     x = width - w * 2 - 10;  
    99.   }  
    100.   if (y < 10) {  
    101.     y = 10;  
    102.   }  
    103.   if (y + h + 10 > height) {  
    104.     y = height - h - 10;  
    105.   }  
    106.   if (lc) {  
    107.     ImageInfo info = new ImageInfo();  
    108.     MagickImage image = null;  
    109.     MagickImage mask = null;  
    110.     MagickImage dest = null;  
    111.     try {  
    112.       image = new MagickImage(new ImageInfo(srcPathName + "[0]"));  
    113.       mask = new MagickImage(new ImageInfo(logoPath));  
    114.       image.setFileName(destPathName);  
    115.       image.writeImage(info);  
    116.       dest = new MagickImage(new ImageInfo(destPathName));  
    117.       dest.compositeImage(CompositeOperator.AtopCompositeOp, mask, x, y);  
    118.       dest.setFileName(destPathName);  
    119.       dest.writeImage(info);  
    120.     } finally {  
    121.       if (image != null) {  
    122.         image.destroyImages();  
    123.       }  
    124.       if (mask != null) {  
    125.         mask.destroyImages();  
    126.       }  
    127.       if (dest != null) {  
    128.         dest.destroyImages();  
    129.       }  
    130.     }  
    131.   }  
    132. }  
    public static void mask(String logoPath, String srcPathName, String destPathName, int location, int scale) throws MagickException { int width = getWidth(srcPathName); int height = getHeight(srcPathName); int x = 0, y = 0; int w, h; w = scale * 70 / 100; h = scale * 65 / 100; boolean lc = true; if (width < height) { switch (location) { case 0: lc = false; break; case 1: x = width / 4 - w; y = height / 8 - h / 2; break; case 2: x = width / 2 - w; y = height / 8 - h / 2; break; case 3: x = width * 3 / 4 - w; y = height / 8 - h / 2; break; case 4: x = width / 4 - w; y = height / 2 - h / 2; break; case 5: x = width / 2 - w; y = height / 2 - h / 2; break; case 6: x = width * 3 / 4 - w; y = height / 2 - h / 2; break; case 7: x = width / 4 - w; y = height * 7 / 8 - h / 2; break; case 8: x = width / 2 - w; y = height * 7 / 8 - h / 2; break; case 9: x = width * 3 / 4 - w; y = height * 7 / 8 - h / 2; break; } } else { switch (location) { case 0: lc = false; break; case 1: x = width / 7 - w; y = height / 6 - h / 2; break; case 2: x = width / 2 - w; y = height / 6 - h / 2; break; case 3: x = width * 6 / 7 - w; y = height / 6 - h / 2; break; case 4: x = width / 7 - w; y = height / 2 - h / 2; break; case 5: x = width / 2 - w; y = height / 2 - h / 2; break; case 6: x = width * 6 / 7 - w; y = height / 2 - h / 2; break; case 7: x = width / 7 - w; y = height * 5 / 6 - h / 2; break; case 8: x = width / 2 - w; y = height * 5 / 6 - h / 2; break; case 9: x = width * 6 / 7 - w; y = height * 5 / 6 - h / 2; break; } } if (x < 10) { x = 10; } if (x + w * 2 + 10 > width) { x = width - w * 2 - 10; } if (y < 10) { y = 10; } if (y + h + 10 > height) { y = height - h - 10; } if (lc) { ImageInfo info = new ImageInfo(); MagickImage image = null; MagickImage mask = null; MagickImage dest = null; try { image = new MagickImage(new ImageInfo(srcPathName + "[0]")); mask = new MagickImage(new ImageInfo(logoPath)); image.setFileName(destPathName); image.writeImage(info); dest = new MagickImage(new ImageInfo(destPathName)); dest.compositeImage(CompositeOperator.AtopCompositeOp, mask, x, y); dest.setFileName(destPathName); dest.writeImage(info); } finally { if (image != null) { image.destroyImages(); } if (mask != null) { mask.destroyImages(); } if (dest != null) { dest.destroyImages(); } } } }

    getWidth(String src) & getHeight(String src)

        
        
        
        
    view plain print ?
    1. public static int getWidth(String src) throws MagickException {  
    2.   MagickImage magImage = null;  
    3.   try {  
    4.     ImageInfo info = new ImageInfo(src + "[0]");  
    5.     magImage = new MagickImage(info);  
    6.     Dimension imageDim = magImage.getDimension();  
    7.     return imageDim.width;  
    8.   } finally {  
    9.     if (magImage != null) {  
    10.       magImage.destroyImages();  
    11.     }  
    12.   }  
    13. }  
    14.   
    15. public static int getHeight(String src) throws MagickException {  
    16.   MagickImage magImage = null;  
    17.   try {  
    18.     ImageInfo info = new ImageInfo(src + "[0]");  
    19.     magImage = new MagickImage(info);  
    20.     Dimension imageDim = magImage.getDimension();  
    21.     return imageDim.height;  
    22.   } finally {  
    23.     if (magImage != null) {  
    24.       magImage.destroyImages();  
    25.     }  
    26.   }  

你可能感兴趣的:(使用JMagick为图片打水印)