给图片添加透明水印

本文介绍如何使用Python给图像添加水印(文本或图片)

如果水印文件是JPG/JPEG格式,我们可以使用一些转换器将JPG转换为PNG。

PNG数组中的第四个整数称为“alpha通道”,它控制透明度(因此命名为“RGBA”)。如上图2所示,PNG支持透明度(即alpha通道),但JPG没有。


img = cv2.imread(img_path) # png图片,jpg需要转为RGBA通道
 
# add transparent log
 transparent_watermark = Image.open(log_path1)
 W,H = log.size # log的宽高
 transparent_watermark=transparent_watermark.resize((W,H))
 log = transparent_watermark 
 npy1 = np.array(transparent_watermark)
 npy1= cv2.cvtColor(npy1,cv2.COLOR_BGRA2RGBA)
 watermark_final = Image.fromarray(npy1)

# 先将原图粘贴的奥画布上,然后将log粘贴到画布上
transparent = Image.new(mode='RGBA',size = (img.shape[1],img.shape[0]), color=0)
transparent.paste(Image.fromarray(img),box=(0,0))  #box是粘贴的起始位置(左上方)
transparent.paste(im=watermark_final, box=(x,y), mask=watermark_final)

# 保存带有水印的图片
img=np.array(transparent)

以上是给图片添加水印的基本过程,如果我们想要控制水印的透明度,可以通过下面的方式来生成具有透明水印的log:

x,y=100,100  # 粘贴log在图片的左上角位置
W,H = log.size # log的宽高
log=cv2.addWeighted(img[y:y+H, x:x+W],0.5,log,0.5,0)

参考:使用Python给图片添加水印 (qq.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中给图片添加水印,可以使用Java的Graphics2D类来实现。下面是一个简单的示例代码: ```java import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Watermark { public static void main(String[] args) throws IOException { File inputFile = new File("input.jpg"); BufferedImage inputImage = ImageIO.read(inputFile); // 创建一个带有透明度的图片,用于绘制水印 BufferedImage watermarkImage = new BufferedImage(inputImage.getWidth(), inputImage.getHeight(), BufferedImage.TYPE_INT_ARGB); // 获取Graphics2D对象,用于绘制水印 Graphics2D g2d = watermarkImage.createGraphics(); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); g2d.setColor(Color.WHITE); g2d.setFont(new Font("Arial", Font.BOLD, 30)); String watermarkText = "Watermark"; FontMetrics fontMetrics = g2d.getFontMetrics(); int x = (inputImage.getWidth() - fontMetrics.stringWidth(watermarkText)) / 2; int y = (inputImage.getHeight() - fontMetrics.getHeight()) / 2; g2d.drawString(watermarkText, x, y); g2d.dispose(); // 把水印图片叠加到原图上 Graphics2D g2dInput = inputImage.createGraphics(); g2dInput.drawImage(watermarkImage, 0, 0, null); g2dInput.dispose(); // 保存图片 File outputFile = new File("output.jpg"); ImageIO.write(inputImage, "jpg", outputFile); } } ``` 在上面的代码中,我们首先读取了一个名为`input.jpg`的图片,然后创建了一个透明度为0.5的带有水印文字的BufferedImage对象,并使用Graphics2D类的drawString()方法将水印文字绘制在该对象上。接着,我们将水印图片叠加到原图上,并保存输出为`output.jpg`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值