当前位置: 首页 > news >正文

python:将白色背景的png转化为透明背景的png并改变尺寸

from PIL import Image
import numpy as np

# 输入输出路径
input_image_path = './cc-logo.png'
output_image_path = './logo.png'

# 设置输出图片的尺寸 (宽度, 高度)
output_size = (246, 184)

# 定义白色容忍度,调整这个值可以控制去白的程度
tolerance = 150

# 打开输入图片并确保其为RGBA模式
try:
    image = Image.open(input_image_path).convert("RGBA")
except FileNotFoundError:
    print(f"错误: 文件 {input_image_path} 未找到,请检查路径是否正确。")
    exit(1)
except Exception as e:
    print(f"错误: 无法打开图片文件 {input_image_path}。详细信息: {e}")
    exit(1)

# 将接近白色的背景变为透明
def make_white_transparent(img, tolerance):
    datas = img.getdata()
    new_data = []
    for item in datas:
        if all([item[i] > 255 - tolerance for i in range(3)]):
            new_data.append((255, 255, 255, 0))
        else:
            new_data.append(item)
    img.putdata(new_data)
    return img

# 初始转换
image = make_white_transparent(image, tolerance)

# 使用放大再缩小的方式来平滑边缘
smooth_factor = 18  # 放大倍数
image = image.resize((image.size[0]*smooth_factor, image.size[1]*smooth_factor), Image.Resampling.LANCZOS)

# 转换回目标大小
original_width, original_height = image.size
target_width, target_height = output_size
ratio = min(target_width / original_width, target_height / original_height)
new_width = int(original_width * ratio)
new_height = int(original_height * ratio)
resized_image = image.resize((new_width, new_height), Image.Resampling.LANCZOS)

# 创建一个新的透明图片作为背景
new_image = Image.new("RGBA", output_size, (0, 0, 0, 0))

# 计算粘贴位置以居中
paste_x = (output_size[0] - new_width) // 2
paste_y = (output_size[1] - new_height) // 2

# 将调整大小后的图片粘贴到透明背景上
new_image.paste(resized_image, (paste_x, paste_y), resized_image)

# 保存输出图片
try:
    new_image.save(output_image_path, format="PNG")
    print(f"成功: 图片已保存到 {output_image_path}")
except Exception as e:
    print(f"错误: 无法保存图片到 {output_image_path}。详细信息: {e}")

相关文章:

  • 【OpenCV 轮廓检测与轮廓筛选】
  • 24V效率高达 94%的同步DCDC转换器WD5030E
  • VBA即用型代码手册:文档Document
  • 《分布式软总线牵手云服务,拓展应用新维度》
  • 新一代AI低代码MES,助力企业数字化升级
  • Redis下载稳定版本5.0.4
  • MySQL学习笔记7【InnoDB】
  • 知识了解02——了解pnpm+vite+turbo+monorepo的完整构建步骤(react子项目)
  • 【websocket】使用案例( ​JSR 356 标准)
  • ch07 题目参考思路
  • Git 实践笔记
  • 【远程工具】0 std::process::Command 介绍
  • 一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel
  • 30天学Java第九天——线程
  • 计算机网络- 传输层安全性
  • BUG:Cannot find implementation for xxx. database. xxx. xxx_Impl does not exist
  • 2024第十五届蓝桥杯大赛软件赛省赛Java大学B组 报数游戏 类斐波那契循环数 分布式队列 食堂 最优分组 星际旅行 LITS游戏 拼十字
  • 【力扣hot100题】(089)最长有效括号
  • 通用 Web 项目安全加固 Checklist(语言无关通用模板)
  • 【2025年认证杯数学中国数学建模网络挑战赛】A题 解题建模过程与模型代码(基于matlab)
  • 中山做网站建设联系电话/百度平台客服电话
  • 学3dmax做效果图的网站/蔡甸seo排名公司
  • 阐述商业网站开发岗位需求分析/接外包项目的网站
  • 网站做301重定向的作用/东莞做网站公司
  • 建网站做商城个体户资质可以/合肥网站制作推广
  • 如何在b2b网站做外链/360收录提交入口网址