import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; public class OrderImg { public static void main(String[] args) { String iconPath="D:/qrCode/img/111/gz2.png";//作为水印的图片 String srcImgPath = "D:/qrCode/img/111/order.png";//需要加水印的源图片 String targerPath2 = "D:/qrCode/img/111/BBB"+System.currentTimeMillis()+".png";//添加水印后保持路径 String dateStr="添加水印文字"; markImageByIcon(iconPath, srcImgPath, targerPath2,0,dateStr,1.0f);//给图片添加文字水印 } /** * 给图片添加“图片水印”、可设置图片水印旋转角度 * @param iconPath 作为水印的图片路径 * @param srcImgPath 源图片路径 * @param targerPath 目标图片路径 * @param degree 水印图片旋转角度 * @param text 添加的水印文字 * @param alpha 水印的透明度 */ public static void markImageByIcon(String iconPath, String srcImgPath,String targerPath, Integer degree,String text,float alpha) { OutputStream os = null; try { //1、源图片 Image srcImg = ImageIO.read(new File(srcImgPath)); BufferedImage buffImg = new BufferedImage( srcImg.getWidth(null),srcImg.getHeight(null), BufferedImage.TYPE_INT_RGB); //2、水印图象:水印一般为gif或者png的,这样可设置透明度 ImageIcon imgIcon = new ImageIcon(iconPath); Image img = imgIcon.getImage();// 得到Image对象。 //3、画笔对象 Graphics2D gp2d = buffImg.createGraphics(); // ---------- 增加下面的代码使得背景透明 ----------------- buffImg = gp2d.getDeviceConfiguration().createCompatibleImage( srcImg.getWidth(null),srcImg.getHeight(null),Transparency.TRANSLUCENT); gp2d.dispose(); gp2d = buffImg.createGraphics(); // ---------- 背景透明代码结束 ----------------- // 设置对线段的锯齿状边缘处理 gp2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);// 设置对线段的锯齿状边缘处理 gp2d.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null), srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null); // 设置水印旋转 if (null != degree) { gp2d.rotate(Math.toRadians(degree),(double) buffImg.getWidth()/2, (double) buffImg.getHeight()/2); } // 设置颜色 // g2d.setColor(Color.red); gp2d.setColor(Color.BLACK); // 设置 Font gp2d.setFont(new Font("微软雅黑", Font.ROMAN_BASELINE, 20)); // 在图形和图像中实现混合和透明效果 gp2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha)); // g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); // 表示水印图片的位置 gp2d.drawImage(img, 300, 150,100,100, null); // 表示添加水印文字 gp2d.drawString(text, 220, 110); //4、释放资源 gp2d.dispose(); //5、生成图片 os = new FileOutputStream(targerPath); ImageIO.write(buffImg,"PNG",os); System.out.println("图片完成添加"); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != os){ os.close();} } catch (Exception e) { e.printStackTrace(); } } } }
标签:srcImg,String,水印,添加,gp2d,null,图片 From: https://www.cnblogs.com/RedOrange/p/17091576.html