在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java实现 图片水印或者文字水印

2016-12-20 13:16| 发布者: zhangjf| 查看: 542| 评论: 0

摘要: 在原图之上再画一张图片(drawImage)或者文本文字(drawString),Java SE中提供了 java.awt.image包和javax.imageio包可以实现非常方便的实现 图片水印或者文字水印。 1.图片水印 import java.awt.AlphaComposite; ...
在原图之上再画一张图片(drawImage)或者文本文字(drawString),Java SE中提供了 java.awt.image包和javax.imageio包可以实现非常方便的实现 图片水印或者文字水印。

1.图片水印

  1. import java.awt.AlphaComposite;
  2. import java.awt.Graphics2D;
  3. import java.awt.Image;
  4. import java.awt.RenderingHints;
  5. import java.awt.image.BufferedImage;
  6. import java.io.File;
  7. import java.io.FileOutputStream;
  8. import java.io.OutputStream;
  9. import javax.imageio.ImageIO;
  10. import javax.swing.ImageIcon;
  11. /**
  12. * 生成图片水印
  13. * @author Ricky Fung
  14. *
  15. */
  16. public class WaterMarkIconTest {
  17. /**
  18. * @param args
  19. */
  20. public static void main(String[] args) {
  21. File srcImageFile = new File("D:/test/myblog.png");
  22. File logoImageFile = new File("D:/test/logo.png");
  23. File outputImageFile = new File("D:/test/myblog_water_icon.jpg");
  24. File outputRoateImageFile = new File("D:/test/myblog_water_icon_rotate.jpg");
  25. createWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile);
  26. createWaterMarkByIcon(srcImageFile, logoImageFile, outputRoateImageFile, 45);
  27. }
  28. public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile,
  29. File outputImageFile) {
  30. createWaterMarkByIcon(srcImageFile, logoImageFile, outputImageFile, 0);
  31. }
  32. public static void createWaterMarkByIcon(File srcImageFile, File logoImageFile,
  33. File outputImageFile, double degree) {
  34. OutputStream os = null;
  35. try {
  36. Image srcImg = ImageIO.read(srcImageFile);
  37. BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
  38. srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
  39. Graphics2D g = buffImg.createGraphics();
  40. g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
  41. RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  42. g.drawImage(
  43. srcImg.getScaledInstance(srcImg.getWidth(null),
  44. srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
  45. null);
  46. ImageIcon logoImgIcon = new ImageIcon(ImageIO.read(logoImageFile));
  47. Image logoImg = logoImgIcon.getImage();
  48. //旋转
  49. if (degree>0) {
  50. g.rotate(Math.toRadians(degree),
  51. (double) buffImg.getWidth() / 2,
  52. (double) buffImg.getWidth() / 2);
  53. }
  54. float alpha = 0.8f; // 透明度
  55. g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
  56. alpha));
  57. //水印 的位置
  58. g.drawImage(logoImg, buffImg.getWidth()/3, buffImg.getHeight()/2, null);
  59. g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
  60. g.dispose();
  61. os = new FileOutputStream(outputImageFile);
  62. // 生成图片
  63. ImageIO.write(buffImg, "JPG", os);
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. } finally {
  67. try {
  68. if (null != os)
  69. os.close();
  70. } catch (Exception e) {
  71. e.printStackTrace();
  72. }
  73. }
  74. }
  75. }
复制代码

2.文字水印

  1. import java.awt.AlphaComposite;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics2D;
  5. import java.awt.Image;
  6. import java.awt.RenderingHints;
  7. import java.awt.image.BufferedImage;
  8. import java.io.File;
  9. import java.io.FileOutputStream;
  10. import java.io.OutputStream;
  11. import javax.imageio.ImageIO;
  12. /**
  13. * 生成文字水印
  14. * @author Ricky Fung
  15. *
  16. */
  17. public class WaterMarkTextTest {
  18. /**
  19. * @param args
  20. */
  21. public static void main(String[] args) {
  22. File srcImgFile = new File("D:/test/myblog.png");
  23. String logoText = "[ 水印文字 电话邦 ]";
  24. File outputImageFile = new File("D:/test/myblog_water_text.jpg");
  25. File outputRotateImageFile = new File("D:/test/myblog_water_text_rotate.jpg");
  26. createWaterMarkByText(srcImgFile, logoText, outputImageFile);
  27. createWaterMarkByText(srcImgFile, logoText, outputRotateImageFile, 45);
  28. }
  29. public static void createWaterMarkByText(File srcImgFile, String logoText,
  30. File outputImageFile) {
  31. createWaterMarkByText(srcImgFile, logoText, outputImageFile, 0);
  32. }
  33. public static void createWaterMarkByText(File srcImgFile, String logoText,
  34. File outputImageFile, double degree) {
  35. OutputStream os = null;
  36. try {
  37. Image srcImg = ImageIO.read(srcImgFile);
  38. BufferedImage buffImg = new BufferedImage(srcImg.getWidth(null),
  39. srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
  40. Graphics2D g = buffImg.createGraphics();
  41. g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
  42. RenderingHints.VALUE_INTERPOLATION_BILINEAR);
  43. g.drawImage(
  44. srcImg.getScaledInstance(srcImg.getWidth(null),
  45. srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0,
  46. null);
  47. if (degree>0) {
  48. g.rotate(Math.toRadians(degree),
  49. (double) buffImg.getWidth() / 2,
  50. (double) buffImg.getHeight() / 2);
  51. }
  52. g.setColor(Color.RED);
  53. g.setFont(new Font("宋体", Font.BOLD, 36));
  54. float alpha = 0.8f;
  55. g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,
  56. alpha));
  57. g.drawString(logoText, buffImg.getWidth()/3, buffImg.getHeight()/2);
  58. g.dispose();
  59. os = new FileOutputStream(outputImageFile);
  60. // 生成图片
  61. ImageIO.write(buffImg, "JPG", os);
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. } finally {
  65. try {
  66. if (null != os)
  67. os.close();
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }
  73. }
复制代码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 17:51

Copyright 2015-2025 djqfx

返回顶部