java做的水印图

java写的水印字和水印图


  1. package image;
  2. import java.io.IOException;
  3. import java.awt.Graphics;
  4. import java.awt.*;
  5. import java.awt.Image;
  6. import java.awt.image.BufferedImage;
  7. import java.awt.image.ImageProducer;
  8. import java.io.File;
  9. import java.io.FileOutputStream;
  10. import javax.imageio.ImageIO;
  11. import com.sun.image.codec.jpeg.JPEGCodec;
  12. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  13. import com.sun.jimi.core.Jimi;
  14. import com.sun.jimi.core.JimiException;
  15. import com.sun.jimi.core.JimiWriter;
  16. import com.sun.jimi.core.options.JPGOptions;
  17. /**
  18.  * 
  19.  * @author myjava_024
  20.  * java做水印,字体和图片,调节透明度
  21.  */
  22. public class ImageOperation {
  23.     
  24.     /**
  25.      * 将任何格式的图片转换成JPG图片 source原图片路径 dest 转换后图片的路径
  26.      */
  27.     public void toReduce(String source, String dest)
  28.     {
  29.         try {
  30.             JPGOptions options = new JPGOptions();
  31.             options.setQuality(100);
  32.             // 图片格式在jimi的解码格式范围内
  33.             ImageProducer image = Jimi.getImageProducer(source);
  34.             // 图片编码
  35.             JimiWriter writer = Jimi.createJimiWriter(dest);
  36.             writer.setSource(image);
  37.             // 对输出文件的属性进行相关的设置,每种格式的属性都不一样
  38.             writer.setOptions(options);
  39.             writer.putImage(dest);
  40.         } catch (JimiException je) {
  41.             System.err.println("Error: " + je);
  42.             je.printStackTrace();
  43.         }
  44.     }
  45.     
  46.     /**
  47.      * 实现对图片的抽取缩略并控制生成图的大小 
  48.      * oldfile原图片路径 newfile缩略后的 图片路径 wideths 缩略后图片的宽 heights缩略后图片的高
  49.      */
  50.     public void changDimension(String oldfile, String newfile, int wideths,
  51.             int heights) throws JimiException, IOException
  52.     {
  53.         String temp = newfile;
  54.         File inputfile = null;
  55.         this.toReduce(oldfile, temp);
  56.         // 读入文件
  57.         inputfile = new File(temp); 
  58.         // 构造Image对象
  59.         Image src = ImageIO.read(inputfile); 
  60.         // double wideth = (double) src.getWidth(null); // 得到源图宽
  61.         // double height = (double) src.getHeight(null); // 得到源图长
  62.         int iWideth = wideths;
  63.         int iHeight = heights;
  64.         BufferedImage tag = null;
  65.         try {
  66.             tag = new BufferedImage(iWideth, iHeight,
  67.                     BufferedImage.TYPE_INT_RGB);
  68.             // 绘制缩小后的图
  69.             tag.getGraphics().drawImage(src, 0, 0, iWideth, iHeight, null); 
  70.             JimiWriter writer = Jimi.createJimiWriter(newfile);
  71.             writer.setSource(tag);
  72.             writer.putImage(newfile);
  73.         } catch (Exception e) {
  74.             e.printStackTrace();
  75.         }
  76.     }
  77.     
  78.     /**
  79.      * 给图片添加文字 oldfile newfile就不用多说了 text 就是给图片加的文字
  80.      */
  81.     public void Imagefont(String oldfile, String newfile, String text)
  82.     {
  83.         Image img;
  84.         String filename = oldfile.substring(oldfile.lastIndexOf(".") + 1);
  85.         String temp = newfile;
  86.         try {
  87.             if (!filename.equals("jpg")) {
  88.                 this.toReduce(oldfile, newfile);
  89.                 img = ImageIO.read(new File(temp));
  90.             } else {
  91.                 img = ImageIO.read(new File(oldfile));
  92.             }
  93.             int width = img.getWidth(null);
  94.             int height = img.getHeight(null);
  95.             BufferedImage image = new BufferedImage(width, height,
  96.                     BufferedImage.TYPE_INT_RGB);
  97.             Graphics g = image.createGraphics();
  98.             g.drawImage(img, 0, 0, width, height, null);
  99.             g.setColor(Color.red);
  100.             g.setFont(new Font("Courier", Font.HANGING_BASELINE, 40));
  101.             g.drawString(text, width - 360, height - 72);
  102.             g.dispose();
  103.             FileOutputStream os = new FileOutputStream(temp);
  104.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
  105.             encoder.encode(image);
  106.         } catch (Exception e) {
  107.             e.getMessage();
  108.         } 
  109.     }
  110.     
  111.     /**
  112.      * 给图片添加水印,并控制水印图片的位置及透明度
  113.      * oldfile newfile我也不说了 syoldfile 要添加的水印图片的路径 t 水印图品添加的位置 to 水印图片的透明度
  114.      */
  115.     public void Imagese(String oldfile, String newfile, String syoldfile,
  116.             int t, float to)
  117.     {
  118.         //文件类型
  119.         String filename = oldfile.substring(oldfile.lastIndexOf(".") + 1);
  120.         System.out.println(filename);
  121.         Image img;
  122.         String temp = newfile;
  123.         float alpha = to;
  124.         try {
  125.             if (!filename.equals("jpg")) {
  126.                 toReduce(oldfile, newfile);
  127.                 img = ImageIO.read(new File(temp));
  128.                 System.out.println("其他类型图片创建生成水印的图片");
  129.             } else {
  130.                 img = ImageIO.read(new File(oldfile));
  131.             }
  132.             int width = img.getWidth(null);
  133.             int height = img.getHeight(null);
  134.             int ws = width / 3;
  135.             int hs = height / 3;
  136.             BufferedImage image = new BufferedImage(width, height,
  137.                     BufferedImage.TYPE_INT_RGB);
  138.             Graphics2D g = image.createGraphics();
  139.             g.drawImage(img, 0, 0, width, height, null);
  140.             Image logo = ImageIO.read(new File(syoldfile));
  141.             int lw = logo.getWidth(null);
  142.             int lh = logo.getHeight(null);
  143.             //设置图片透明度
  144.             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
  145.                     alpha));
  146.             g.drawImage(logo, nullnull);
  147.             switch (t) {
  148.             case 1:
  149.                 g.drawImage(logo, 0, 0, lw, lh, null);
  150.                 System.out.println("布局一");
  151.                 break;
  152.             case 2:
  153.                 g.drawImage(logo, ws, 0, lw, lh, null);
  154.                 System.out.println("布局二");
  155.                 break;
  156.             case 3:
  157.                 g.drawImage(logo, 2 * ws, 0, lw, lh, null);
  158.                 System.out.println("布局三");
  159.                 break;
  160.             case 4:
  161.                 g.drawImage(logo, 0, hs, lw, lh, null);
  162.                 System.out.println("布局四");
  163.                 break;
  164.             case 5:
  165.                 g.drawImage(logo, ws, hs, lw, lh, null);
  166.                 System.out.println("布局五");
  167.                 break;
  168.             case 6:
  169.                 g.drawImage(logo, 2 * ws, hs, lw, lh, null);
  170.                 System.out.println("布局六");
  171.                 break;
  172.             case 7:
  173.                 g.drawImage(logo, 0, 2 * hs, lw, lh, null);
  174.                 System.out.println("布局七");
  175.                 break;
  176.             case 8:
  177.                 g.drawImage(logo, ws, 2 * hs, lw, lh, null);
  178.                 System.out.println("布局八");
  179.                 break;
  180.             case 9:
  181.                 g.drawImage(logo, 2 * ws, 2 * hs, lw, lh, null);
  182.                 System.out.println("布局九");
  183.                 break;
  184.             default:
  185.                 break;
  186.             }
  187.             g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
  188.             g.dispose();
  189.             //生成图片
  190.             FileOutputStream oss = new FileOutputStream(temp);
  191.             JPEGImageEncoder encoders = JPEGCodec.createJPEGEncoder(oss);
  192.             encoders.encode(image);
  193.         } catch (Exception e) {
  194.             e.getMessage();
  195.             e.printStackTrace();
  196.         }
  197.     }
  198.     
  199.     public static void main(String [] args)
  200.     {
  201.         ImageOperation test = new ImageOperation();
  202.         //alpha表示透明度,alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字
  203.         float alpha = 0.2f;
  204.         //生成水印图
  205.         
  206.         test.Imagese("d:/001.svg""d:/003.svg""d:/002.svg", 1, alpha); 
  207.         /*test.Imagese("d:/001.jpg", "d:/aa/001.jpg", "d:/002.jpg", 1, alpha); 
  208.         test.Imagese("d:/001.jpg", "d:/aa/002.jpg", "d:/002.jpg", 2, alpha); 
  209.         test.Imagese("d:/001.jpg", "d:/aa/003.jpg", "d:/002.jpg", 3, alpha); 
  210.         test.Imagese("d:/001.jpg", "d:/aa/004.jpg", "d:/002.jpg", 4, alpha); 
  211.         test.Imagese("d:/001.jpg", "d:/aa/005.jpg", "d:/002.jpg", 5, alpha); 
  212.         test.Imagese("d:/001.jpg", "d:/aa/006.jpg", "d:/002.jpg", 6, alpha); 
  213.         test.Imagese("d:/001.jpg", "d:/aa/007.jpg", "d:/002.jpg", 7, alpha); 
  214.         test.Imagese("d:/001.jpg", "d:/aa/008.jpg", "d:/002.jpg", 8, alpha); 
  215.         test.Imagese("d:/001.jpg", "d:/aa/009.jpg", "d:/002.jpg", 9, alpha); */
  216.         
  217.         
  218.     }
  219. }

这里面需要使用个JimiProClasses.jar这个包,我把包传资源上了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值