python 中 图片压缩加水印代码 这个是通过百度文心一言写的

没有测试。 如果只是压缩不加水印 可以设置   

修改  # 如果图片宽度或高度小于500像素,则不添加水印并直接保存图片  ,把500设置更大,比如999999

在这个版本中,我添加了以下功能:

支持设置水印的透明度(opacity),范围是0(完全透明)到1(完全不透明)。
允许用户指定输出图片的质量(quality),这会影响JPEG格式图片的压缩质量。
增加了对水印位置(position)的更多选项支持,包括随机位置('random')、中心位置('center')、顶部左侧('top-left')、顶部右侧('top-right')、底部左侧('bottom-left')和底部右侧('bottom-right')。
增加了对无效位置参数的异常处理。
允许用户指定输出图片的格式(format),比如JPEG、PNG等。
你可以根据自己的需求调整这些参数和功能。

 

import random  
from PIL import Image  
  
def add_watermark(image_path, watermark_path, output_path, position='random', size=(140, 90), opacity=0.5, quality=90, format='JPEG'):  
    try:  
        img = Image.open(image_path)  
        width, height = img.size  
  
        # 如果图片宽度或高度小于500像素,则不添加水印并直接保存图片  
        if width < 500 or height < 500:  
            img.save(output_path, format=format, quality=quality)  
            return "Image is too small to add watermark."  
  
        # 图片大小调整逻辑(如果需要)  
        max_width = 800  
        if width > max_width:  
            scale_ratio = max_width / width  
            new_height = int(height * scale_ratio)  
            img = img.resize((max_width, new_height), Image.LANCZOS)  
  
        # 加载水印图片并调整大小  
        watermark = Image.open(watermark_path)  
        watermark = watermark.resize(size, Image.LANCZOS)  
  
        # 确保水印是RGBA模式  
        if watermark.mode != 'RGBA':  
            watermark = watermark.convert('RGBA')  
  
        # 调整水印的透明度  
        watermark_alpha = watermark.split()[-1]  
        adjusted_alpha = Image.eval(watermark_alpha, lambda a: int(a * opacity * 255))  
        watermark_with_alpha = Image.merge('RGBA', watermark.split()[:-1] + (adjusted_alpha,))  
  
        # 确定水印位置  
        if position == 'random':  
            max_x = width - size[0]  
            max_y = height - size[1]  
            left = random.randint(0, max_x)  
            top = random.randint(0, max_y)  
            position = (left, top)  
        elif position == 'center':  
            left = (width - size[0]) // 2  
            top = (height - size[1]) // 2  
            position = (left, top)  
        elif position == 'top-left':  
            position = (0, 0)  
        elif position == 'top-right':  
            position = (width - size[0], 0)  
        elif position == 'bottom-left':  
            position = (0, height - size[1])  
        elif position == 'bottom-right':  
            position = (width - size[0], height - size[1])  
        else:  
            raise ValueError("Invalid position. Use 'random', 'center', 'top-left', 'top-right', 'bottom-left', or 'bottom-right'.")  
  
        # 粘贴水印到图片上  
        img.paste(watermark_with_alpha, position, watermark_with_alpha)  
  
        # 保存带有水印的图片  
        img.save(output_path, format=format, quality=quality)  
        return "Watermark added successfully."  
    except IOError:  
        return "Failed to open image or watermark file."  
    except Exception as e:  
        return "Failed to add watermark: " + str(e)  
  
# 使用示例  
add_watermark('path_to_your_image.jpg', 'path_to_your_watermark.png', 'path_to_output_image.jpg', position='bottom-right', opacity=0.3, quality=80, format='PNG')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值