精华内容
下载资源
问答
  • 文字水印

    2017-11-23 10:50:00
    using System.Threading.Tasks;using System.IO;using System.Drawing; public static int Shuy(string Sname,string fname) { try { Image image = Image.From...

     

    using System.Threading.Tasks;
    using System.IO;
    using System.Drawing;

     

    public static int Shuy(string Sname,string fname)
    {
    try
    {
    Image image = Image.FromFile(fname);
    Graphics gra = Graphics.FromImage(image);
    String text = Sname;
    Font font = new Font("宋体", 26);
    SizeF size = new SizeF();
    SolidBrush seli = new SolidBrush(Color.FromArgb(220, 220, 0, 0));
    gra.DrawString(text, font, seli, new PointF(image.Width / 5, image.Height / 2 - size.Height / 2));
    image.Save(@"E:\高四\日考\Zk2\Zk2\haha\lala11.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    return 1;
    }
    catch (Exception)
    {
    return 0;
    throw;
    }

    }

    转载于:https://www.cnblogs.com/w-pengchao/p/7883708.html

    展开全文
  • React水印组件,支持图片水印,文字水印
  • 添加文字水印

    2018-05-11 11:02:05
    为richEditControl添加文字水印的具体实现方法,方便快速开发。
  • 用VB.net生成文字水印和图片水印,本例是一个微型软件程式,可移植到WEB平台使用哦,可设置文字水印的文字,指定水印图片地址……。
  • ZZImageAddWatermark 图片添加文字水印,图片水印,自定义二维码生成水印
  • 主要为大家详细介绍了android添加文字水印,并支持多行水印,自定义角度和文字大小,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 使用itext开发包对pdf文件进行去水印操作,包括删除图片水印和文字水印。通过遍历pdf的contents对象和xobjects对象,进行对象删除,速度快,效率高
  • 生成文字水印或者是图片水印,需求是可预览水印,水印文字可自行赋值,图片可自己上传进行赋值就可,如果要添加其他种类水印,在watermarkjs里可自行添加测试,从其他博客找的进行了修改
  • PHP实现的给图片添加水印功能,可添加文字水印或图片水印,使用文字水印时需要提供字体文件,使用图片水印时需要提供水印图片,水印图片不能比要添加水印的图片大,请使用背景透明的水印图片。 该水印类支持自定义...
  • andriod加文字水印 支持配置文字大小,倾斜角度,多行水印
  • 给图片添加文字水印 设置文字的位置、大小、样式、类型、透明度、颜色等 给图片添单个文字水印 /* * 给图片添加单个文字水印类 * */ public class TextWatermarking { //定义图片水印字体类型 public static ...

    给图片添加文字水印

    设置文字的位置、大小、样式、类型、透明度、颜色等

    给图片添单个文字水印

    /*
    * 给图片添加单个文字水印类
    * */
    public class TextWatermarking {
    
        //定义图片水印字体类型
        public static final String FONT_NAME = "微软雅黑";
    
    
        //定义图片水印字体加粗、变细、倾斜等样式
        public static final int FONT_STYLE = Font.BOLD;
    
        //设置字体大小
        public static final int FONT_SIZE = 120;
    
        //设置文字透明程度
        public static float ALPHA = 0.3F;
    
        /**
         * 给图片添加单个文字水印、可设置水印文字旋转角度
         * source 需要添加水印的图片路径(如:F:/images/6.jpg)
         * outPut 添加水印后图片输出路径(如:F:/images/)
         * imageName 图片名称
         * imageType 图片类型
         * color 水印文字的颜色
         * word 水印文字
         * degree 水印文字旋转角度,为null表示不旋转
         */
    
        public Boolean markImageBySingleText(String sourcePath, String outputPath, String imageName, String imageType, Color color, String word, Integer degree) {
    
            try {
    
                //读取原图片信息
                File file = new File(sourcePath);
    
                if (!file.isFile()) {
                    return false;
                }
    
                //获取源图像的宽度、高度
                Image image = ImageIO.read(file);
                int width = image.getWidth(null);
                int height = image.getHeight(null);
    
                BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    
                //创建绘图工具对象
                Graphics2D graphics2D = bufferedImage.createGraphics();
                //其中的0代表和原图位置一样
                graphics2D.drawImage(image, 0, 0, width, height, null);
    
                //设置水印文字(设置水印字体样式、粗细、大小)
                graphics2D.setFont(new Font(FONT_NAME, FONT_STYLE, FONT_SIZE));
    
                //设置水印颜色
                graphics2D.setColor(color);
    
                //设置水印透明度
                graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,ALPHA));
    
                //设置水印旋转
                if (null != degree) {
                    graphics2D.rotate(Math.toRadians(degree),(double) bufferedImage.getWidth() / 2, (double) bufferedImage.getHeight() / 2);
                }
    
                int x = width - (FONT_SIZE * 4);
                int y = height/2;
    
                //进行绘制
                graphics2D.drawString(word, x, y);
                graphics2D.dispose();
    
                //输出图片
                File sf = new File(outputPath, imageName+"."+imageType);
                // 保存图片
                ImageIO.write(bufferedImage, imageType, sf);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }
    }
    

    给图片添加多个文字水印 

    /*
    * 给图片添加多个文字水印类
    * */
    public class TextWatermarking {
    
        //定义图片水印字体类型
        public static final String FONT_NAME = "微软雅黑";
    
    
        //定义图片水印字体加粗、变细、倾斜等样式
        public static final int FONT_STYLE = Font.BOLD;
    
        //设置字体大小
        public static final int FONT_SIZE = 120;
    
        //设置文字透明程度
        public static float ALPHA = 0.3F;
    
        /**
         * 给图片添加多个文字水印、可设置水印文字旋转角度
         * source 需要添加水印的图片路径
         * outPut 添加水印后图片输出路径
         * imageName 图片名称
         * imageType 图片类型
         * color 水印文字的颜色
         * word 水印文字
         * degree 水印文字旋转角度,为null表示不旋转
         */
        public Boolean markImageByMoreText(String sourcePath, String outputPath, String imageName, String imageType, Color color, String word, Integer degree) {
            try {
                //读取原图片信息
                File file = new File(sourcePath);
    
                if (!file.isFile()) {
                    return false;
                }
    
                //获取源图像的宽度、高度
                Image image = ImageIO.read(file);
                int width = image.getWidth(null);
                int height = image.getHeight(null);
    
                BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    
                //创建绘图工具对象
                Graphics2D graphics2D = bufferedImage.createGraphics();
                //其中的0代表和原图位置一样
                graphics2D.drawImage(image, 0, 0, width, height, null);
    
                //设置水印文字(设置水印字体样式、粗细、大小)
                graphics2D.setFont(new Font(FONT_NAME, FONT_STYLE, FONT_SIZE));
    
                //设置水印颜色
                graphics2D.setColor(color);
    
                //设置水印透明度
                graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, ALPHA));
    
                //设置水印旋转
                if (null != degree) {
                    graphics2D.rotate(Math.toRadians(degree), (double) bufferedImage.getWidth() / 2, (double) bufferedImage.getHeight() / 2);
                }
    
                int x = width / 3;
                int y = FONT_SIZE;
                int space = height / FONT_SIZE;
                for (int i = 0; i < space; i++) {
                    //如果最后一个坐标的y轴比height高,直接退出
                    if ((y + FONT_SIZE) > height) {
                        break;
                    }
                    //进行绘制
                    graphics2D.drawString(word, x, y);
                    y += (2 * FONT_SIZE);
                }
    
                graphics2D.dispose();
    
                //输出图片
                File sf = new File(outputPath, imageName + "." + imageType);
                // 保存图片
                ImageIO.write(bufferedImage, imageType, sf);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }
    }
    

    给图片添加图片水印

    设置图片水印的位置、旋转角度等

    给图片添单个图片水印

    /*
    * 给图片添加单个图片水印、可设置水印图片旋转角度
    * */
    public class ImageWatermark {
    
        /**
         *icon 水印图片路径(如:F:/images/icon.png)
         *source 没有加水印的图片路径(如:F:/images/6.jpg)
         *output 加水印后的图片路径(如:F:/images/)
         *imageName 图片名称(如:11111)
         *imageType 图片类型(如:jpg)
         *degree 水印图片旋转角度,为null表示不旋转
         */
        public Boolean markImageBySingleIcon(String icon,String source,String output,String imageName,String imageType,Integer degree) {
    
            try {
                File file = new File(source);
                File ficon = new File(icon);
    
                if (!file.isFile()) {
                    return false;
                }
    
                //将icon加载到内存中
                Image ic = ImageIO.read(ficon);
                //icon高度
                int icheight = ic.getHeight(null);
                //将源图片读到内存中
                Image img = ImageIO.read(file);
    
                //图片宽
                int width = img.getWidth(null);
                //图片高
                int height = img.getHeight(null);
    
                BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
                //创建一个指定 BufferedImage 的 Graphics2D 对象
                Graphics2D g = bi.createGraphics();
    
                //x,y轴默认是从0坐标开始
                int x = 0;
                int y = (height/2)-(icheight/2);
    
                //设置对线段的锯齿状边缘处理
                g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                //呈现一个图像,在绘制前进行从图像空间到用户空间的转换
                g.drawImage(img.getScaledInstance(width,height,Image.SCALE_SMOOTH),0,0,null);
    
                if (null != degree) {
                    //设置水印旋转
                    g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);
                }
                //水印图象的路径 水印一般为gif或者png的,这样可设置透明度
                ImageIcon imgIcon = new ImageIcon(icon);
                //得到Image对象。
                Image con = imgIcon.getImage();
                //透明度,最小值为0,最大值为1
                float clarity = 0.6f;
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,clarity));
                //表示水印图片的坐标位置(x,y)
                //g.drawImage(con, 300, 220, null);
                g.drawImage(con, x, y, null);
                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
                g.dispose();
                File sf = new File(output, imageName+"."+imageType);
                ImageIO.write(bi, imageType, sf); // 保存图片
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }
    }
    

    给图片添加多个图片水印

    /*
    * 给图片不同位置添加多个图片水印、可设置水印图片旋转角度
    * */
    public class ImageWatermark {
    
        /**
         * icon 水印图片路径
         * source 没有加水印的图片路径
         * output 加水印后的图片路径
         * imageName 图片名称
         * imageType 图片类型
         * degree 水印图片旋转角度,为null表示不旋转
         */
        public Boolean markImageByMoreIcon(String icon,String source,String output,String imageName,String imageType,Integer degree) {
    
            try {
                File file = new File(source);
                
                File ficon = new File(icon);
                
                if (!file.isFile()) {
                    return false;
                }
                //将icon加载到内存中
                Image ic = ImageIO.read(ficon);
                
                //icon高度
                int icheight = ic.getHeight(null);
                
                //将源图片读到内存中
                Image img = ImageIO.read(file);
                
                //图片宽
                int width = img.getWidth(null);
                //图片高
                int height = img.getHeight(null);
                
                BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
                //创建一个指定 BufferedImage 的 Graphics2D 对象
                Graphics2D g = bi.createGraphics();
                
                //x,y轴默认是从0坐标开始
                int x = 0;
                int y = 0;
                
                //默认两张水印图片的间隔高度是水印图片的1/3
                int temp = icheight/3;
                int space = 1;
                if(height>=icheight){
                    space = height/icheight;
                    if(space>=2){
                        temp = y = icheight/2;
                        if(space==1||space==0){
                            x = 0;
                            y = 0;
                        }
                    }
                }else{
                    x = 0;
                    y = 0;
                }
                
                //设置对线段的锯齿状边缘处理
                g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                
                //呈现一个图像,在绘制前进行从图像空间到用户空间的转换
                g.drawImage(img.getScaledInstance(width,height,Image.SCALE_SMOOTH),0,0,null);
                for(int i=0;i<space;i++){
                    if (null != degree) {
                        //设置水印旋转
                        g.rotate(Math.toRadians(degree),(double) bi.getWidth() / 2, (double) bi.getHeight() / 2);
                    }
                    //水印图象的路径 水印一般为gif或者png的,这样可设置透明度
                    ImageIcon imgIcon = new ImageIcon(icon);
                    //得到Image对象。
                    Image con = imgIcon.getImage();
                    //透明度,最小值为0,最大值为1
                    float clarity = 0.6f;
                    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,clarity));
                    //表示水印图片的坐标位置(x,y)
                    //g.drawImage(con, 300, 220, null);
                    g.drawImage(con, x, y, null);
                    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
                    y+=(icheight+temp);
                }
                g.dispose();
                File sf = new File(output, imageName+"."+imageType);
                ImageIO.write(bi, imageType, sf); // 保存图片
            } catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }
    }
    

    给图片添加马赛克

    设置马赛克的尺寸、每个马赛克的宽和高

    /*
    * 给图片添加马赛克
    * */
    public class MosaicImage {
    
        /**
         * source 原图片路径
         * output 打马赛克后,图片保存的路径
         * imageName 图片名称
         * imageType 图片类型
         * size 马赛克尺寸,即每个矩形的宽高
         */
        public Boolean markImageByMosaic(String source,String output,String imageName,String imageType,int size){
    
            try{
                File file = new File(source);
                if (!file.isFile()) {
                    return false;
                }
                BufferedImage img = ImageIO.read(file); // 读取该图片
                int width = img.getWidth(null); //原图片宽
                int height = img.getHeight(null); //原图片高
                BufferedImage bi = new BufferedImage(width,height, BufferedImage.TYPE_INT_RGB);
                //马赛克格尺寸太大或太小
                if (width < size || height < size) {
                    return false;
                }
                if(size<=0){
                    return false;
                }
                int xcount = 0; //x方向绘制个数
                int ycount = 0; //y方向绘制个数
    
                if (width % size == 0) {
                    xcount = width / size;
                } else {
                    xcount = width / size + 1;
                }
    
                if (height % size == 0) {
                    ycount = height / size;
                } else {
                    ycount = height / size + 1;
                }
    
                int x = 0; //x坐标
                int y = 0;//y坐标
    
                //绘制马赛克(绘制矩形并填充颜色)
                Graphics2D g = bi.createGraphics();
                for (int i = 0; i < xcount; i++) {
                    for (int j = 0; j < ycount; j++) {
                        //马赛克矩形格大小
                        int mwidth = size;
                        int mheight = size;
                        if(i==xcount-1){  //横向最后一个不够一个size
                            mwidth = width-x;
                        }
    
                        if(j == ycount-1){ //纵向最后一个不够一个size
                            mheight = height-y;
                        }
    
                        //矩形颜色取中心像素点RGB值
                        int centerX = x;
                        int centerY = y;
    
                        if (mwidth % 2 == 0) {
                            centerX += mwidth / 2;
                        } else {
                            centerX += (mwidth - 1) / 2;
                        }
    
                        if (mheight % 2 == 0) {
                            centerY += mheight / 2;
                        } else {
                            centerY += (mheight - 1) / 2;
                        }
    
                        Color color = new Color(img.getRGB(centerX, centerY));
                        g.setColor(color);
                        g.fillRect(x, y, mwidth, mheight);
                        y = y + size;// 计算下一个矩形的y坐标
                    }
    
                    y = 0;// 还原y坐标
                    x = x + size;// 计算x坐标
                }
                g.dispose();
                File sf = new File(output, imageName+"."+imageType);
                ImageIO.write(bi, imageType, sf); // 保存图片
    
            }catch(Exception e){
                e.printStackTrace();
            }
            return true;
        }
    }
    

     

    展开全文
  • 有时上传图片时需要给网站加上水印,水印可以分为文字水印和图片水印,下面就实现这二种水印
  • 单张瓦片添加单个文字水印、可设置水印文字内容,字体,颜色,旋转角度,透明度 controller层 import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation....

    微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

    直接上源码:

    单张瓦片添加单个文字水印、可设置水印文字内容,字体,颜色,旋转角度,透明度

    controller层

    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.geovis.domain.DataObject;
    import com.geovis.domain.TileWatermark;
    import com.geovis.service.TileService;
    
    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    
    import javax.annotation.Resource;
    import javax.imageio.ImageIO;
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    
    @RestController
    @Api(description= "瓦片")
    @RequestMapping("/api/v1")
    public class TileController {
    	
    	private final Logger logger = LoggerFactory.getLogger(TileController.class);
    	
    	@Resource
    	private TileService tileService;
    	/**
    	 * 单张瓦片添加单个文字水印、可设置水印文字内容,字体,颜色,旋转角度,透明度
    	 * @param tileWatermark
    	 * @return
    	 * @throws Exception
    	 */
    	//@HystrixCommand
    	@ApiOperation(value = "单张瓦片添加单个文字水印",notes = "可设置水印文字内容,位置,字体,颜色,旋转角度,透明度")
    	@GetMapping(value = "/watermarks")
    	public Map<String, String> watermarks(@RequestBody TileWatermark tileWatermark) throws Exception {
    			
    		
    		Map<String, String> watermark = new ConcurrentHashMap<String,String>();
    		String resultInfo = tileService.watermarkBySingleText(tileWatermark);
    		watermark.put("resultInfo", resultInfo);
    		return watermark;
    	}
    }

    实体类

    import java.awt.Color;
    import java.io.Serializable;
    
    import io.swagger.annotations.ApiParam;
    
    public class TileWatermark implements Serializable{
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 8870574699118240793L;
    
    	//需要加水印的瓦片路径
    	private String tilePath;
    	//添加水印后瓦片输出路径
    	private String tileOutputPath;
    	//输出瓦片名称
    	private String tileOutputName;
    	//输出瓦片类型
    	private String tileOutputType;
    	//水印文字内容
    	private String watermarkContent;
    	//水印文字位置
    	private String watermarkPosition;
    	//水印文字字体类型
    	private String watermarkFontType;
    	//水印文字字体风格
    	private String watermarkFontStyle;
    	//水印文字字体大小
    	private Integer watermarkFontSize;
    	//水印文字颜色
    	private Color watermarkColor;
    	//水印文字旋转角度,null表示不旋转
    	private Integer watermarkDegree;
    	//水印文字透明度
    	private float watermarkAlpha;
    	
    	public String getTilePath() {
    		return tilePath;
    	}
    	public void setTilePath(String tilePath) {
    		this.tilePath = tilePath;
    	}
    	public String getTileOutputPath() {
    		return tileOutputPath;
    	}
    	public void setTileOutputPath(String tileOutputPath) {
    		this.tileOutputPath = tileOutputPath;
    	}
    	public String getTileOutputName() {
    		return tileOutputName;
    	}
    	public void setTileOutputName(String tileOutputName) {
    		this.tileOutputName = tileOutputName;
    	}
    	public String getTileOutputType() {
    		return tileOutputType;
    	}
    	public void setTileOutputType(String tileOutputType) {
    		this.tileOutputType = tileOutputType;
    	}
    	public String getWatermarkContent() {
    		return watermarkContent;
    	}
    	public void setWatermarkContent(String watermarkContent) {
    		this.watermarkContent = watermarkContent;
    	}
    	public String getWatermarkPosition() {
    		return watermarkPosition;
    	}
    	public void setWatermarkPosition(String watermarkPosition) {
    		this.watermarkPosition = watermarkPosition;
    	}
    	public String getWatermarkFontType() {
    		return watermarkFontType;
    	}
    	public void setWatermarkFontType(String watermarkFontType) {
    		this.watermarkFontType = watermarkFontType;
    	}
    	public String getWatermarkFontStyle() {
    		return watermarkFontStyle;
    	}
    	public void setWatermarkFontStyle(String watermarkFontStyle) {
    		this.watermarkFontStyle = watermarkFontStyle;
    	}
    	public Integer getWatermarkFontSize() {
    		return watermarkFontSize;
    	}
    	public void setWatermarkFontSize(Integer watermarkFontSize) {
    		this.watermarkFontSize = watermarkFontSize;
    	}
    	public Color getWatermarkColor() {
    		return watermarkColor;
    	}
    	public void setWatermarkColor(Color watermarkColor) {
    		this.watermarkColor = watermarkColor;
    	}
    	public Integer getWatermarkDegree() {
    		return watermarkDegree;
    	}
    	public void setWatermarkDegree(Integer watermarkDegree) {
    		this.watermarkDegree = watermarkDegree;
    	}
    	public float getWatermarkAlpha() {
    		return watermarkAlpha;
    	}
    	public void setWatermarkAlpha(float watermarkAlpha) {
    		this.watermarkAlpha = watermarkAlpha;
    	}
    	
    	
    }

    service

    
    import java.awt.Color;
    
    import com.geovis.domain.TileFuse;
    import com.geovis.domain.TileWatermark;
    
    
    public interface TileService {
    
    	String watermarkBySingleText(TileWatermark tileWatermark);
    	
    		  
    }
    

    service实现层

    import java.awt.AlphaComposite;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    
    import org.springframework.stereotype.Service;
    
    import com.geovis.domain.TileFuse;
    import com.geovis.domain.TileWatermark;
    import com.geovis.service.TileService;
    
    
    @Service
    public class TileServiceImpl implements TileService {
    
    	@Override
    	public String watermarkBySingleText(TileWatermark tileWatermark) {
    		
    		Color watermarkColor = tileWatermark.getWatermarkColor();
    		Integer watermarkDegree = tileWatermark.getWatermarkDegree();
    		float watermarkAlpha = tileWatermark.getWatermarkAlpha();
    		String watermarkContent = tileWatermark.getWatermarkContent();
    		String tileOutputPath = tileWatermark.getTileOutputPath();
    		String tileOutputName = tileWatermark.getTileOutputName();
    		String tileOutputType = tileWatermark.getTileOutputType();
    		String resultinfo = "瓦片添加单个水印出錯";
    		
    		try {
    			// 读取原瓦片信息
    			File file = new File(tileWatermark.getTilePath());
    			if (!file.isFile()) {
    				return file + " 不是一个瓦片文件!";
    			}
    			Image tile = ImageIO.read(file);
    			int width = tile.getWidth(null);
    			int height = tile.getHeight(null);
    			
    			// 加水印
    			BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    			
    			// 得到画笔对象
    			Graphics2D g = bufferedImage.createGraphics();
    			g.drawImage(tile, 0, 0, width, height, null);
    			// 设置对线段的锯齿状边缘处理
    			// g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    
    			// g.drawImage(tile.getScaledInstance(tile.getWidth(null),tile.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);
    			
    			// 设置水印字体样式
    			Font font = new Font("微软雅黑", Font.PLAIN, 50);
    			g.setFont(font);
    			
    			// 根据图片的背景设置水印颜色
    			g.setColor(watermarkColor);
    			// 设置水印旋转角度
    			if (null != watermarkDegree) {
    				// 设置水印旋转
    				g.rotate(Math.toRadians(watermarkDegree), (double) bufferedImage.getWidth() / 2, (double) bufferedImage.getHeight() / 2);
    			}
    
    			// 设置水印透明度
    			g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, watermarkAlpha));
    
    			// 水印位置
    			int x = width / 2;
    			int y = height / 2;
    			g.drawString(watermarkContent, x, y);
    
    			g.dispose();
    			// 输出图片
    			File sf = new File(tileOutputPath, tileOutputName + "." + tileOutputType);
    			ImageIO.write(bufferedImage, tileOutputType, sf); // 保存图片
    			resultinfo = "瓦片添加单个水印成功";
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		return resultinfo;
    	}
    	
    }

     

    展开全文
  • 摘要:C#源码,图形图像,图片加水印,批量加水印 Visual C#批量图片加水印程序,支持文字水印,也可浏览一张水印图片,同时支持通过本水印程序添加文字的水印,并可设置字体;使用图片水印的时候,还可进行图片透明度...
  • 图片添加文字水印

    2019-02-15 09:44:16
    java语言 图片上传 MultipartFile文件类型接收,添加文字水印,转InputStream输入流
  • 文字水印效果

    2015-01-16 14:40:29
    java 文字 水印效果 里面有个Util 背景图片 和 效果图片
  • 图片加文字水印

    2018-05-15 15:25:28
    图片加文字水印,可以调整文字大小位置颜色字体,可以批量加,delphi编写
  • 主要介绍了PHP图像处理 imagestring添加图片水印与文字水印操作,结合实例形式分析了PHP使用imagestring添加图片水印与文字水印具体操作步骤与相关实现技巧,需要的朋友可以参考下
  • 上传之前预览 ,上传到服务器后加文字水印 或者 图片水印,调用相应的方法即可
  • pdf加文字水印

    2017-10-30 10:33:51
    使用itextsharp对pdf加入文字水印,简单、方便、快捷,下载即用。
  • Android为图片加图片logo水印,可以加文字水印,左上角,右上角,中间,左下角,右下角
  • 可以添加文字水印的c# 类函数。
  • java图片水印文字水印

    2012-05-03 14:59:31
    * 文字水印 * @param pressText 水印文字 * @param targetImg 目标图片 * @param fontName 字体名称 * @param fontStyle 字体样式 * @param color 字体颜色 * @param fontSize 字体大小 * @param x ...
  • C#图片加文字水印和图片水印源码
  • 通过java实现满屏倾斜文字水印和java 满屏图片水印效果
  • javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作 javaCV图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制 ...

    javaCV系列文章:

    javacv开发详解之1:调用本机摄像头视频

    javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG、javaCV-openCV)

    javaCV开发详解之3:收流器实现,录制流媒体服务器的rtsp/rtmp视频文件(基于javaCV-FFMPEG)

    javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)

    javaCV开发详解之5:录制音频(录制麦克风)到本地文件/流媒体服务器(基于javax.sound、javaCV-FFMPEG)

    javaCV开发详解之6:本地音频(话筒设备)和视频(摄像头)抓取、混合并推送(录制)到服务器(本地)

    javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

    javaCV开发详解之8:转封装在rtsp转rtmp流中的应用(无须转码,更低的资源消耗,更好的性能,更低延迟)

    javaCV开发详解之9:基于gdigrab的windows屏幕画面抓取/采集(基于javacv的屏幕截屏、录屏功能)

    javaCV开发详解之10:基于dshow调用windows摄像头视频和音频,想要获取屏幕画面首选gdigrab

    javaCV开发详解之11:视频文件转gif动态图片实现,也支持摄像机、桌面屏幕、流媒体等视频源转gif

    javaCV开发详解之12:视频转apng动态图片实现,支持透明通道支持摄像机、桌面屏幕、流媒体等视频源转apng动态图

    javaCV开发详解之13:使用FFmpeg Filter过滤器处理音视频

    javaCV开发详解之14:音频重采样

    javaCV开发详解之15:视频帧像素格式转换

    javaCV开发详解之16:使用一张图片推流和一张图片录制成视频文件

    javaCV开发详解之17:GIF和APNG动态图片推流和录制成视频文件(以gif转mp4为例)

    javaCV开发详解之18:音视频转码(音频编解码和视频编解码)

    JavaCV开发详解之19:如何开启GPU硬件加速,使用JavaCV进行音视频的硬解码和硬编码

    JavaCV开发详解之20:如何使用JavaCV制作ico图标,图片和视频生成ico图标,视频流录制ico图标

    JavaCV开发详解之21:如何使用JavaCV接入gb28181的ps流并推流到流媒体服务和接入海康大华sdk回调h264/hevc裸流
    JavaCV开发详解之22:flv,live_flv格式说明,http-flv拉流和http-flv推流及rtmp拉流和rtmp推流全面分析和开发实战
    JavaCV开发详解之23:hls视频录制,m3u8切片录制和fmp4切片录制详解
    JavaCV开发详解之24:使用javacv录制dash视频分片,mpeg-dash视频录制和制作

    JavaCV开发详解之25:使用javacv保存raw视频像素格式(yuv或者rgb),并使用ffplay播放raw
    JavaCV开发详解之26:使用javacv对视频进行连续截图和覆盖截图,支持png,jpg,bmp等格式快速连续截图,适用于视频快照
    JavaCV开发详解之27:使用javacv把视频切割成多个视频分片文件,以mp4为例,把视频切割成MP4分片文件

    JavaCV开发详解之28:如何使用javacv进行多图推流和多图合成视频文件,以批量jpg图片推流rtmp和jpg合成flv视频文件为例

    JavaCV开发详解之29:使用javacv将多个视频拼接合成单个视频,多个音频拼接合成单个音频
    JavaCV开发详解之30:如何使用javacv拉取rtsp视频流,rtsp解复用器详解。如何把rtsp调教的服服帖帖,让rtsp拉流不再丢包

    补充篇:

    javaCV开发详解补充篇:基于avfoundation的苹果Mac和ios获取屏幕画面及录屏/截屏以及摄像头画面和音频采样获取实现

    javaCV开发详解之GIF动态图片录制补充篇:windows桌面屏幕画面录制成gif动态图片,支持桌面任意取域生成gif,可扩展支持MacOS/安卓/linux等平台,可扩展支持apng动态图片

    音视频编解码问题:javaCV如何快速进行音频预处理和解复用编解码(基于javaCV-FFMPEG)

    音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例

    实现给图片增加图片水印或者文字水印(也支持视频图像帧添加水印)

    java原生实现屏幕设备遍历和屏幕采集(捕获)等功能

    javaCV图像处理系列:

    javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作

    javaCV图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制

     

    前言:

    这是个很常用的操作,一般我们的网站在用户上传图片时都会给图片添加一个水印以防止其他站点盗图的行为

    实现功能:①给图片增加文字水印②给图片增加图片水印

    一、核心功能实现:

    1、添加文字水印

     

    // 加文字水印
    	public void mark(BufferedImage bufImg, Image img, String text, Font font, Color color, int x, int y) {
    		Graphics2D g = bufImg.createGraphics();
    		g.drawImage(img, 0, 0, bufImg.getWidth(), bufImg.getHeight(), null);
    		g.setColor(color);
    		g.setFont(font);
    		g.drawString(text, x, y);
    		g.dispose();
    	}

    2、添加图片水印

     

     

    // 加图片水印
    	public void mark(BufferedImage bufImg, Image img, Image markImg, int width, int height, int x, int y) {
    		Graphics2D g = bufImg.createGraphics();
    		g.drawImage(img, 0, 0, bufImg.getWidth(), bufImg.getHeight(), null);
    		g.drawImage(markImg, x, y, width, height, null);
    		g.dispose();
    	}

     

     

    以上两个方法实现了最核心的功能:给图片添加水印。

    补充:

    为什么要这么写?

    考虑到该方法不仅可以用于给图片文件增加水印,而且还可以给视频的每一帧图像也添加,所以为了方便不同场合重复使用,去除了不必要的依赖关系。

    有了核心的两个方法就我们可以给图片文件增加水印了

    二、功能性实现

    1、给图片增加文字水印

     

    /**
    	 * 给图片增加文字水印
    	 * 
    	 * @param imgPath
    	 *            -要添加水印的图片路径
    	 * @param outImgPath
    	 *            -输出路径
    	 * @param text-文字
    	 * @param font
    	 *            -字体
    	 * @param color
    	 *            -颜色
    	 * @param x
    	 *            -文字位于当前图片的横坐标
    	 * @param y
    	 *            -文字位于当前图片的竖坐标
    	 */
    	public void mark(String imgPath, String outImgPath, String text, Font font, Color color, int x, int y) {
    		try {
    			// 读取原图片信息
    			File imgFile = null;
    			Image img = null;
    			if (imgPath != null) {
    				imgFile = new File(imgPath);
    			}
    			if (imgFile != null && imgFile.exists() && imgFile.isFile() && imgFile.canRead()) {
    				img = ImageIO.read(imgFile);
    			}
    			int imgWidth = img.getWidth(null);
    			int imgHeight = img.getHeight(null);
    			// 加水印
    			BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);
    			mark(bufImg, img, text, font, color, x, y);
    			// 输出图片
    			FileOutputStream outImgStream = new FileOutputStream(outImgPath);
    			ImageIO.write(bufImg, "jpg", outImgStream);
    			outImgStream.flush();
    			outImgStream.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    

     

     

     

     

     

    2、给图片增加图片水印

     

    /**
    	 * 给图片增加图片水印
    	 * 
    	 * @param inputImg
    	 *            -源图片,要添加水印的图片
    	 * @param markImg
    	 *            - 水印图片
    	 * @param outputImg
    	 *            -输出图片(可以是源图片)
    	 * @param width
    	 *            - 水印图片宽度
    	 * @param height
    	 *            -水印图片高度
    	 * @param x
    	 *            -横坐标,相对于源图片
    	 * @param y
    	 *            -纵坐标,同上
    	 */
    	public void mark(String inputImg, String markImg, String outputImg, int width, int height, int x, int y) {
    		// 读取原图片信息
    		File inputImgFile = null;
    		File markImgFile = null;
    		Image img = null;
    		Image mark = null;
    		try {
    			if (inputImg != null && markImg != null) {
    				inputImgFile = new File(inputImg);
    				markImgFile = new File(markImg);
    			}
    			if (inputImgFile != null && inputImgFile.exists() && inputImgFile.isFile() && inputImgFile.canRead()) {
    
    				img = ImageIO.read(inputImgFile);
    
    			}
    			if (markImgFile != null && markImgFile.exists() && markImgFile.isFile() && markImgFile.canRead()) {
    
    				mark = ImageIO.read(markImgFile);
    
    			}
    			int imgWidth = img.getWidth(null);
    			int imgHeight = img.getHeight(null);
    			BufferedImage bufImg = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_RGB);
    			mark(bufImg, img, mark, width, height, x, y);
    			FileOutputStream outImgStream = new FileOutputStream(outputImg);
    			ImageIO.write(bufImg, "jpg", outImgStream);
    			outImgStream.flush();
    			outImgStream.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}


    3、测试一下效果

     

    文字水印的字体和颜色需要自行定义,这里我们使用宋体,14号字体,颜色选择橙色 - -!,坐标是x轴0,y轴等于字体的大小,也就是图片的左上角。

     

    public static void main(String[] args) {
    		Font font = new Font("宋体", Font.PLAIN, 14);
    		// 原图位置, 输出图片位置, 水印文字颜色, 水印文字
    		// new MarkText4J().mark("eguidMarkText2.jpg", "eguidMarkText2.jpg", "水印效果测试", font, Color.ORANGE, 0, 14);
    		// 增加图片水印
    		new MarkText4J().mark("eguidMarkText2.jpg", "eguid.jpg", "eguidMarkText3.jpg", 40, 20, 0, 14);
    	}

    简直棒极了,至此我们可以随意的给图片任意位置添加任意文字或者图片水印了。

    最后,额。。。导出的图片比原本图片还小是什么鬼?欢迎加入讨论群一起讨论:371249677。- -!

     

     

     

     

     

     

     

    展开全文
  • 该类库暂时只支持文字水印,位置为右下角,颜色随机 调用方法: 1、在需要加水印的文件顶部引入类库: include_once 'imageClass.php'; 2、声明新类: $tpl=new image_fu; 3、给图片水印提供参数: $tpl->img(图片...
  • java为PDF添加水印,文字水印和图片水印 一个需求,下载pdf、word、excel文件时要带有水印,要求铺满。先分开,先介绍为PDF文件添加文字水印和图片水印。 所需jar包:itext-2.0.1.jar。(itextpdf-5.5.8.jar,这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,833
精华内容 1,933
关键字:

文字水印