zoukankan      html  css  js  c++  java
  • 为已定图片加水印

             在做图库项目时,为防止一些付费图片"泄密" ,不仅需要调整其宽高像素,还需要为图片加水印。加水印的目的有两个:1.保护图片,防止直接截屏便可得图的情况发生;2为网站做广告宣传。

            整个图片制作过程所需的材料 有两样:原图 和 水印(PS轻松制作)

            整个图片制作过程所需的步骤有两步:

     

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import javax.imageio.ImageIO;
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;
    
    public final class ImageUtils {
        public ImageUtils() {
    
        }
    
        /**
         * public final static String getPressImgPath() { return ApplicationContext
         * .getRealPath("/template/data/util/shuiyin.gif"); }
         */
    
        /**
         * 把图片印刷到图片上
         * 
         * @param pressImg --
         *            水印文件
         * @param targetImg --
         *            目标文件
         * @param x
         *            --x坐标
         * @param y
         *            --y坐标
         */
        public final static void pressImage(String pressImg, String targetImg,
                int x, int y) {
            try {
                //目标文件
                File _file = new File(targetImg);
                Image src = ImageIO.read(_file);
                int wideth = src.getWidth(null);
                int height = src.getHeight(null);
                BufferedImage image = new BufferedImage(wideth, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = image.createGraphics();
                g.drawImage(src, 0, 0, wideth, height, null);
    
                //水印文件
                File _filebiao = new File(pressImg);
                Image src_biao = ImageIO.read(_filebiao);
                int wideth_biao = src_biao.getWidth(null);
                int height_biao = src_biao.getHeight(null);
                System.out.println(wideth_biao);
                System.out.println(wideth_biao);
                // 左右上下宽高
                g.drawImage(src_biao,wideth*4/5,
                		height*4/5, wideth/5, height/5, null);
                //水印文件结束
                g.dispose();
                FileOutputStream out = new FileOutputStream(targetImg);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(image);
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 打印文字水印图片
         * 
         * @param pressText
         *            --文字
         * @param targetImg --
         *            目标图片
         * @param fontName --
         *            字体名
         * @param fontStyle --
         *            字体样式
         * @param color --
         *            字体颜色
         * @param fontSize --
         *            字体大小
         * @param x --
         *            偏移量
         * @param y
         */
    
        public static void pressText(String pressText, String targetImg,
                String fontName, int fontStyle, int color, int fontSize, int x,
                int y) {
            try {
                File _file = new File(targetImg);
                Image src = ImageIO.read(_file);
                int wideth = src.getWidth(null);
                int height = src.getHeight(null);
                BufferedImage image = new BufferedImage(wideth, height,
                        BufferedImage.TYPE_INT_RGB);
                Graphics g = image.createGraphics();
                g.drawImage(src,100, 100, 100, 100, null);
                
                g.setColor(Color.RED);
                g.setFont(new Font(fontName, fontStyle, fontSize));
    
                g.drawString(pressText, wideth - fontSize - x, height - fontSize
                        / 2 - y);
                g.dispose();
                FileOutputStream out = new FileOutputStream(targetImg);
                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
                encoder.encode(image);
                out.close();
            } catch (Exception e) {
                System.out.println(e);
            }
        }
    
        public static void main(String[] args) {
            pressImage("F:/111.png","F:/Tulips.jpg", 500, 500);
        }
    }
    


                   以上代码是将水印按比例放于原图右下角,你可以通过设置与原图的上、 左边距 把水印调整到满意的位置,水印大小由画图时的设置有关,调整宽高即可

          

                  接下来需要研究的话题 就是如何 屏蔽 右键的另存为 或者直接屏蔽右键 来达到保护图片的效果

                 请看下文:

                 右键阻止图片另存为

                      

                

            

  • 相关阅读:
    Java 浮点数精度丢失
    旧梦。
    luogu6584 重拳出击
    luogu1758 [NOI2009]管道取珠
    luogu4298 [CTSC2008]祭祀
    bzoj3569 DZY Loves Chinese II
    AGC006C Rabbit Exercise
    bzoj1115 [POI2009]石子游戏Kam
    luogu5675 [GZOI2017]取石子游戏
    bzoj3143 [HNOI2013]游走
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3206334.html
Copyright © 2011-2022 走看看