《2022年图片加水印归类 .pdf》由会员分享,可在线阅读,更多相关《2022年图片加水印归类 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Lily200825 图片加水印( java版)一、功能说明1. 将水印图片叠加到原图上2. 可设置水印图片透明度(默认为 1 不透明 ) 3. 可设置水印图片相对于原图的左边距和上边距(默认为 0) 4. 可设置水印图片的宽高(默认为原始尺寸) 5. 注意事项. 图片输出到本地. 为防止内存溢出,请增大jvm 内存 (推荐-Xmx1024m) . 可处理 20M 左右 (10000 10000)超高清图片名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - -
2、- - - - - - - Lily200825 二、代码1. 原代码import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import javax.imageio.stream.ImageIn
3、putStream; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; /* * 图片加水印* 图片输出到本地. * 为防止内存溢出,请增大jvm 内存 (推荐-Xmx1024m). * 可处理 20M 左右大图片 . * * author lily200825 * date 2011-6-1 */ public class ImageWatermarkUtil / 输出打印日志public static boolean IS_DEBUG = true; /*
4、 * 图片加水印* * param srcImg * 原图片路径* param watermarkImg * 水印图片路径* param destImg * 输出图片路径名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - Lily200825 * param alpha * 水印图透明度* param left * 水印图相对原图左边距(默认值为0) * param top * 水印图相对原图上边距(默认值为0) * param
5、width * 水印图输出宽 (默认值为 水印图宽 ) * param height * 水印图输出高 (默认值为 水印图高 ) * return * throws IOException */ public static boolean watermarkImage(String srcImg, String watermarkImg, String destImg, Float alpha, Integer left, Integer top, Integer width, Integer height) throws IOException if (destImg = null | de
6、stImg.trim().length() = 0) if (IS_DEBUG) System.err.println( 图片加水印:输出图片路径 + destImg + 错误。 。 。); return false; File srcfile = new File(srcImg); if (srcfile = null | srcfile.exists() = false | srcfile.isFile() = false) if (IS_DEBUG) System.err.println( 图片加水印: + srcImg + 文件不存在。 。 。); return false; File
7、 watermarkfile = new File(watermarkImg); if (watermarkfile = null | watermarkfile.exists() = false | watermarkfile.isFile() = false) if (IS_DEBUG) System.err.println( 图片加水印: + watermarkImg + 文件不存在。 。); return false; return watermarkImage(javax.imageio.ImageIO.read(srcfile), javax.imageio.ImageIO.rea
8、d(watermarkfile), destImg, alpha, left, top, width, height); /* 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - Lily200825 * 图片加水印* * param srcInput * 原图输入流* param watermarkInput * 水印图输入流* param destImg * 输出图片路径* param alpha * 水印图透明度* para
9、m left * 水印图相对原图左边距(默认值为0) * param top * 水印图相对原图上边距(默认值为0) * param width * 水印图输出宽 (默认值为 水印图宽 ) * param height * 水印图输出高 (默认值为 水印图高 ) * return * throws IOException */ public static boolean watermarkImage(InputStream srcInput, InputStream watermarkInput, String destImg, Float alpha, Integer left, Integ
10、er top, Integer width, Integer height) throws IOException if (destImg = null | destImg.trim().length() = 0) if (IS_DEBUG) System.err.println( 图片加水印:输出图片路径 + destImg + 错误。 。 。); return false; if (srcInput = null) if (IS_DEBUG) System.err.println( 图片加水印:源图输入流为空。 。); return false; if (watermarkInput =
11、null) if (IS_DEBUG) System.err.println( 图片加水印:水印图输入流为空。 。); return false; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - Lily200825 return watermarkImage(javax.imageio.ImageIO.read(srcInput), javax.imageio.ImageIO.read(watermarkInput), de
12、stImg, alpha, left, top, width, height); /* * 图片加水印* * param srcInput * 原图输入流* param watermarkInput * 水印图输入流* param destImg * 输出图片路径* param alpha * 水印图透明度* param left * 水印图相对原图左边距(默认值为0) * param top * 水印图相对原图上边距(默认值为0) * param width * 水印图输出宽 (默认值为 水印图宽 ) * param height * 水印图输出高 (默认值为 水印图高 ) * return
13、 * throws IOException */ public static boolean watermarkImage(ImageInputStream srcInput, ImageInputStream watermarkInput, String destImg, Float alpha, Integer left, Integer top, Integer width, Integer height) throws IOException if (destImg = null | destImg.trim().length() = 0) if (IS_DEBUG) System.e
14、rr.println( 图片加水印:输出图片路径 + destImg + 错误。 。 。); return false; if (srcInput = null) if (IS_DEBUG) System.err.println( 图片加水印:源图输入流为空。 。); return false; if (watermarkInput = null) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - Lily200825 if (
15、IS_DEBUG) System.err.println( 图片加水印:水印图输入流为空。 。); return false; return watermarkImage(javax.imageio.ImageIO.read(srcInput), javax.imageio.ImageIO.read(watermarkInput), destImg, alpha, left, top, width, height); public static boolean watermarkImage(Image srcImage, Image watermarkImage, String destImg
16、, Float alpha, Integer left, Integer top, Integer width, Integer height) throws IOException if (destImg = null | destImg.trim().length() = 0) if (IS_DEBUG) System.err.println( 图片加水印:输出图片路径 + destImg + 错误。 。 。); return false; if (srcImage = null) if (IS_DEBUG) System.err.println( 图片加水印:源图不是有效的图片。 。);
17、 return false; if (watermarkImage = null) if (IS_DEBUG) System.err.println( 图片加水印:水印图不是有效的图片。 。); return false; int src_w = srcImage.getWidth(null); / 源图宽int src_h = srcImage.getHeight(null);/ 源图高int wmk_w = watermarkImage.getWidth(null); int wmk_h = watermarkImage.getHeight(null); alpha = alpha = n
18、ull ? 1F : alpha;/ 透明度left = left = null ? 0 : left;/ 水印左边距top = top = null ? 0 : top;/ 水印上边距width = width = null ? (wmk_w+left src_w ? src_w-left : wmk_w) : (width+left src_w ? src_w - left : width); height = height = null ? (wmk_h+top src_h ? src_h-top : wmk_h) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
19、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - Lily200825 : (height+top src_h ? src_h - top : height); StringBuffer sb = null; boolean params_error = false; if (IS_DEBUG) sb = new StringBuffer( 图片加水印: ); if (alpha 1F) if (IS_DEBUG) sb.append( 透明度超出有效范围(01)! ); params_error
20、= true; if (left = src_w) if (IS_DEBUG) sb.append( 左边距超出原图有效宽度!); params_error = true; if (top = src_h) if (IS_DEBUG) sb.append( 上边距超出原图有效高度!); params_error = true; if (width = 0) if (IS_DEBUG) sb.append( 水印图宽度不能小于或等于0 ! ); params_error = true; if (height = 0) if (IS_DEBUG) sb.append( 水印图高度不能小于或等于0
21、! ); params_error = true; if (params_error) if (IS_DEBUG) System.err.println(sb.toString(); return false; / 合成原图 +水印图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 10 页 - - - - - - - - - Lily200825 BufferedImage image = new BufferedImage(src_w, src_h, BufferedI
22、mage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.drawImage(srcImage, 0, 0, src_w, src_h, null); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha); g.drawImage(watermarkImage, left, top, width, height, null); g.dispose(); / 输出为图片FileOutputStream out = new FileOutput
23、Stream(destImg); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); encoder.encode(image); out.close(); if (IS_DEBUG) System.out.println( 图片加水印:原图片宽高为 + src_w + + src_h + ,水印图片的宽高为 + wmk_w + + wmk_h + ,水印图片输出起点为 + left + , + top + ,水印图片输出宽高为 + width + + height + ,水印图片输出透明度为 + alpha + ,输出图片
24、的宽高为 + src_w + + src_h +.) ; return true; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - Lily200825 2. 测试代码import java.io.File; import javax.imageio.ImageIO; import com.lili.util.image.ImageCutUtil; import com.lili.util.image.ImageWaterma
25、rkUtil; import com.lili.util.image.ImageZoomUtil; public class TestImage private String dir = K:/workspace/ 测试目录 /images/; private String big_img = dir + 黄沙滨海 .jpg; private String small_img = dir + 传闻中的七公主-崔贞元 .bmp; private String _WATERMARK_ =_ 水印 _; /# 图片加水印# / Test public void testImageWatermarkU
26、til() String srcImg = dir + _ 等比 _固定宽高 _黄沙滨海 .jpg; String watermarkImg = small_img; Integer left = null; Integer top = null; Integer width = null ; Integer height = null; Float alpha = 0.6F; File f = new File(srcImg); int lastIndex = f.getAbsolutePath().lastIndexOf(File.separator); / 父目录String path
27、= f.getAbsolutePath().substring(0 , lastIndex+1); try long start = System.currentTimeMillis(); ImageWatermarkUtil.watermarkImage( ImageIO.read(new File(srcImg) ,ImageIO.read(new File(watermarkImg) , path+ _WATERMARK_ + f.getName() , alpha , left, top , width ,height); / 5125 名师资料总结 - - -精品资料欢迎下载 - -
28、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - Lily200825 System.err.println( 总计耗时 :+(System.currentTimeMillis() - start); catch (Exception e) e.printStackTrace(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -