给图片加水印

简介:

在51cto写博文上传图片的时候,觉得图片上加上水印很有意思,与是有了自己动手写一个加水印的小程序,自己动手丰衣足食。来看看我写的代码吧,哈哈


 
 
  1. package com.sucre.blog;  
  2.  
  3. import java.awt.Color;  
  4. import java.awt.Font;  
  5. import java.awt.Graphics2D;  
  6. import java.awt.Image;  
  7. import java.awt.image.BufferedImage;  
  8. import java.io.FileOutputStream;  
  9.  
  10. import javax.swing.ImageIcon;  
  11.  
  12. import com.sun.image.codec.jpeg.JPEGCodec;  
  13. import com.sun.image.codec.jpeg.JPEGEncodeParam;  
  14. import com.sun.image.codec.jpeg.JPEGImageEncoder;  
  15. /**  
  16.  * 给图片加水印  
  17.  * @author sucre  
  18.  *  
  19.  */ 
  20. public class ProductWaterMark {  
  21.     public boolean createMark(String filePath, String markContent,  
  22.             Color markContentColor, float qualNum, String watermark) {  
  23.         ImageIcon imgIcon = new ImageIcon(filePath);  
  24.         Image theImg = imgIcon.getImage();  
  25.         int width = theImg.getWidth(null);  
  26.         int height = theImg.getHeight(null);  
  27.         BufferedImage bimage = new BufferedImage(width, height,  
  28.                 BufferedImage.TYPE_INT_RGB);  
  29.         Font font = new Font("新宋体", Font.PLAIN, 50);//这里控制图片上文字的大小  
  30.         Graphics2D g = bimage.createGraphics();  
  31.         g.setColor(markContentColor);  
  32.         g.setFont(font);  
  33.         g.setBackground(Color.white);  
  34.         g.drawImage(theImg, 00null);  
  35.         //添加水印的文字和设置水印文字出现的内容  
  36.         g.drawString(markContent, width - 800, height - 80);   
  37.         g.dispose();  
  38.         try {  
  39.             FileOutputStream out = new FileOutputStream(filePath);  
  40.             JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);  
  41.             JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);  
  42.             param.setQuality(qualNum, true);  
  43.             encoder.encode(bimage, param);  
  44.             out.close();  
  45.         } catch (Exception e)  
  46.         {  
  47.             return false;  
  48.         }  
  49.         return true;  
  50.     }  
  51.  
  52.     public static void main(String arg[]) {  
  53.         ProductWaterMark wk = new ProductWaterMark();  
  54.         boolean successOrNot = wk.createMark("F:\\我的图片\\1.jpg","http://sucre.blog.51cto.com", Color.BLACK, 23f, "");  
  55.         System.out.println(successOrNot?"You are Success!":"You are Failure");  
  56.     }  
  57. }  

无水印的图

 

加水印后的图片

 

看到了吧,图片的最小方有一行大黑字,虽然没有博客系统加的好看,但是我觉得还行。



本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/416185,如需转载请自行联系原作者


相关文章
|
算法 索引
算法—滑动窗口
滑动窗口算法简介滑动窗口,顾名思义,就是有一个大小可变的窗口,左右两端方向一致的向前滑动(右端固定,左端滑动;左端固定,右端滑动)。可以想象成队列,一端在push元素,另一端在pop元素,如下所示:假设有数组[a b c d e f g h]一个大小为3的滑动窗口在其上滑动,则有:[a b c][b c d][c d e][d e f][e f g][f g h]适用范围1、一般是字符串或...
115 0
|
11月前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
286 2
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
223 7
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
|
存储 算法 开发工具
Git 中文参考(七)(3)
Git 中文参考(七)
77 0
|
数据库
解决which is not functionally dependent on columns in GROUP BY clause;...sql_mode=only_full_group_by
解决which is not functionally dependent on columns in GROUP BY clause;...sql_mode=only_full_group_by
579 0
|
数据安全/隐私保护
软件开发常见流程之水印添加水印需求
软件开发常见流程之水印添加水印需求
|
Java 测试技术 Maven
5个编写技巧,有效提高单元测试实践
结合单测的实践,本文总结了几点单元测试的好处与编写技巧,希望分享给大家。
26597 50
5个编写技巧,有效提高单元测试实践
|
Cloud Native 应用服务中间件 Apache
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(1)
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(1)
230 1
带你读《Apache Tomcat的云原生演进》——Tomcat的技术内幕和在喜马拉雅的实践(1)
|
Java 数据安全/隐私保护
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
1505 0
JAVA 实现上传图片添加水印(详细版)(上)
|
Shell Linux 数据安全/隐私保护
如何在Mac OS下用ISO包制作启动U盘
从U盘启动现在越来越重要了。在没有 cd/dvd 驱动器的情况下,为了安装您选择的操作系统, U盘最简单。事实上, 它甚至可以比刻录 CD 或 DVD 更便宜, 一旦版本过时就扔掉。
4025 0

热门文章

最新文章