使用 Python 图像库调整透明 png 大小和光晕效果

2024-01-04

SO 上有几个类似的问题,但没有一个真正有帮助。基本上我正在尝试调整一个简单的 png 图像的大小,如下所示:

http://media.spiralknights.com/wiki-images/3/3e/Equipment-Proto_Sword_icon.png http://media.spiralknights.com/wiki-images/3/3e/Equipment-Proto_Sword_icon.png(来自大型多人在线游戏《螺旋骑士》,版权所有三环娱乐)

我最初实现了一个在 php 中使用这些图像的实用程序,并且那里的调整大小实用程序运行得非常好。我使用了 PHP 文档中 imagecopyresampled 页面上描述的方法。

老实说,我什至无法在 Photoshop 中更好地调整大小,但在 python 中结果几乎是灾难性的。我始终得到光晕效果,并且我相信这至少部分与透明像素的实际 RGBA 值有关。在这里,这张图更能说明问题:

(倒数第二个调整大小只是我在另一个论坛上看到的建议,首先将大小调整为最终大小的两倍,它至少有一点帮助,但还不够)

调整图像大小时图像已处于 RGBA 模式。

正如您所看到的,PHP 和 Photoshop 调整大小是没有光环的。老实说,除了 PHP 调整大小之外的所有工作都做了太多工作,我喜欢 php 图像中的最小调色板(如果您查看较大的版本,您可以看到 PHP 调整大小在颜色之间使用较少),但我可以接受 Photoshop 的方式已经调整了它的大小,甚至Python的内部也调整了大小,但光环是不可接受的。

在我看来——如果我错了,请纠正我——PHP 和 Photoshop 似乎知道在插值时不使用 alpha 通道中像素的颜色,但 python 正在使用浅色边框,否则它是透明的,在其调整大小中。

不幸的是,我需要调整很多不同的图标大小,具有不同的配置文件,因此它们并不都像这个圆形图标那么简单,但这只是我在实验时使用的第一个图标。

这本身并不是一个代码问题,但如果您需要看一些东西,那么要点就是:

>> import Image
>> img = Image.open('swordorig.png')
>> img
<PngImagePlugin.PngImageFile image mode=RGBA size=256x256 at 0x2A3AF58>
>> img.resize((36,36), Image.ANTIALIAS).save('swordresize.png')

最终的问题是:有没有办法告诉 PIL 在重采样时不要使用 alpha 为 0 的像素的颜色?


谢谢大家的回答!特别是 rotoglup 告诉我我真正要找的东西的术语。通过查看 PIL 中预乘 alpha 的堆栈溢出页面,我找到了一个可行的解决方案;这是调整图形大小的更新表:

灰色条只是为了给人一种它们在浅色背景下的样子的印象。

https://stackoverflow.com/a/6882161/1189554 https://stackoverflow.com/a/6882161/1189554

感谢马德拉格

所以我的代码最终看起来像这样:

>> import Image, numpy
>> img = Image.open('swordorig.png')
>> premult = numpy.fromstring(img.tostring(), dtype=numpy.uint8)
>> alphaLayer = premult[3::4] / 255.0
>> premult[::4] *= alphaLayer
>> premult[1::4] *= alphaLayer
>> premult[2::4] *= alphaLayer
>> img = Image.fromstring("RGBA", img.size, premult.tostring())
>> img.resize((36,36), Image.ANTIALIAS).save('swordresize.png')

您会看到工作表底部的图标。仍然比 PHP 版本有更多的颜色,并且环非常温和,但总体来说要好得多。我确信可以对算法进行调整以进一步改进它。再次感谢大家的回复!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python 图像库调整透明 png 大小和光晕效果 的相关文章

  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 添加反斜杠而不转义[重复]

    这个问题在这里已经有答案了 我需要逃离 字符串中的 字符 问题是每当我string string replace 结果是 添加额外的反斜杠来转义原始反斜杠 如何删除这个多余的反斜杠 结果 仅显示 实际上字符串是 gt gt gt str g
  • Ttk Treeview:跟踪键盘选择

    这是一个带有 ttk 树视图的 Tk 小部件 当用户单击该行时 会执行某些功能 此处仅打印项目文本 我需要的是以下内容 最初的重点是文本输入 当用户按下 Tab 键时 焦点应该转到第一行 并且应该执行绑定到 Click 事件的函数 当用户使
  • 使用 theano 进行多处理

    我正在尝试将 theano 与 cpu 多处理和神经网络库 Keras 结合使用 I use device gpu标记并加载 keras 模型 然后 为了提取超过一百万张图像的特征 我使用多处理池 该函数看起来像这样 from keras
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • 显示多索引 pandas 数据帧的前 10 行

    我有一个多级索引 pandasDataFrame第一级在哪里year第二级是username 我只有一列已经按降序排序 我想显示每个索引级别 0 的前 2 行 我拥有的 count year username 2010 b 677 a 50
  • 如何判断Python对象是否是字符串?

    如何检查 Python 对象是否是字符串 常规字符串或 Unicode Python 2 Use isinstance obj basestring 对于要测试的对象obj Docs https docs python org 2 7 li
  • Google App Engine 开发服务器中的 PyCrypto“ImportError:无法导入名称 blockalgo”

    我有一个使用 PyCrypto 使用 AES 加密字符串的函数 当我在单元测试中调用该函数时 一切正常 在生产环境中 它也运行得很好 但是 在GAE开发服务器上调用该函数时 会抛出错误 ImportError 无法导入名称blockalgo
  • 来自异常导入 PendingDeprecationWarning ModuleNotFoundError:没有名为“异常”的模块

    我正在尝试使用Python 创建一个word 文档 我在终端中 pip install python docx 我的代码如下所示 from docx import Document document Document document sa
  • 使用 Python gdata 和 oAuth 2 对日历进行身份验证

    我正在将一个 Python 应用程序从 oAuth 1 迁移到 oAuth 2 该应用程序读取用户的 Google 日历提要 使用 oAuth 1 如果用户可以使用他的 GMail 进行身份验证 我的应用程序将打开浏览器 帐户并授权访问 我
  • 使用每日频率格式化 x 轴

    我正在尝试获取每日数据图 我有 3 个月的数据 每天都很难指出 如何格式化 x 轴 以便我可以获得每个日期 可以使用以下命令更改主要刻度的频率set major locator mdates DayLocator interval 5 如下
  • Python docker 容器在完成运行应用程序后立即关闭,即使指定保留在 -d -t 中

    我有一个 dockerfile FROM python 3 WORKDIR app ADD venv venv ADD data file1 csv gz data file1 csv gz ADD data file2 csv gz da
  • 为什么 Python 布尔值占用超过一个字节?

    显然 Python 中整数占用 24 个字节 我可以理解 它这样做是因为代表无限数字的额外花哨 然而 布尔数据类型看起来也花费了高达 24 个字节 尽管它只能表示两个可能值之一 为什么 除了 1 位表示之外 还可能需要存储哪些额外数据Tru
  • Django ConnectionAbortedError:[WinError 10053]已建立的连接被主机中的软件中止

    我将 django 与 postgresql 一起使用 每当我尝试保存或删除任何内容时 都会发生此错误 Traceback most recent call last File c program files x86 python35 32
  • 使用 PyQt5 拖放 QLabels

    我正在尝试使用 PyQt5 将 Qlabel 拖放到另一个 Qlabel 上 from PyQt5 QtWidgets import QApplication QWidget QToolTip QPushButton QMessageBox
  • 如何更改 PyGame 中声音或音乐的音量?

    如何更改 PyGame 中的音量 例如通过设置更改音量 我制作了 UI 元素 只需要知道如何更改音量即可 我知道我说不清楚 但你可以理解我 请帮忙 更改音量取决于您是否正在播放pygame mixer Sound https www pyg
  • PyTorch 中的交叉熵

    交叉熵公式 但为什么下面给出loss 0 7437代替loss 0 since 1 log 1 0 import torch import torch nn as nn from torch autograd import Variable
  • Pygame 文本不渲染

    好的 我正在用 python 和 pygame 制作一个多项选择测验游戏 不过 我已经完成了开始屏幕并尝试制作问题屏幕 我根本不明白为什么文本不呈现 这是我的代码 enter pressed False random question ra
  • 如何从 Python 脚本捕获 Curl 的输出

    我想使用curl查找有关网页的信息 但在Python中 到目前为止我有这个 os system curl head www google com 如果我运行它 它会打印出 HTTP 1 1 200 OK Date Sun 15 Apr 20
  • 如何在Python中从stdin中逐行读取

    每个人都知道如何在 C 中计算 STDIN 中的字符 但是 当我尝试在 python3 中执行此操作时 我发现这是一个难题 计数器 py import sys chrCounter 0 for line in sys stdin readl

随机推荐

  • 如何使用检索到的分层结果集创建对象?

    我使用的是C 语言 我的问题是我不知道如何将检索到的分层结果集存储到我的对象中 这是我的对象 public class CategoryItem public string Name get set public int CategoryI
  • SAS 我可以逆向进行 sas 过程观察吗

    我知道Sas在处理时从数据集顶部的观察开始 然后继续进行下一个直到到达底部观察 但是有没有一种简单的方法可以让sas首先处理底部观察 然后再处理到顶部 您可以使用nobs and point向后处理它 而无需执行任何中间步骤 这是一个例子
  • 在 VSCode 中更改 Git 帐户

    同步我的更改时 VSCode 第一次尝试连接时 我不小心输入了旧 github 帐户的凭据 凭据适用于旧帐户 但我想使用新帐户 现在我找不到更改帐户的方法 已尝试卸载 安装 但 VSCode 一直记住我的登录信息 有什么想法如何刷新给定帐户
  • 如何获取 R 中具有公共 S4 超类的类列表

    在 R 中 如何获取 S4 超类的子类列表 我发现 showClass mySuperClass complete FALSE 但它只打印结果 我想将它存储在向量中以使用它 发现类定义的类 类定义本身就是一个 S4 类 cls getCla
  • 为什么当我点击 vue 组件上的另一个选项卡时滑块不起作用?

    我的看法是这样的 foreach leagues as league a league gt name a endforeach div class tab pane active div
  • 由另一个线程建立的独占访问 Java smartcardio

    All 我很欣赏这个网站上的许多有用的答案 但我发现有必要发布我的第一个问题 如果您发现我的帖子中有任何需要改进的地方 请告诉我 我有一个中等大小的带有 GUI 的 Java 程序 它充当 中间人 和控制器 在信息流的一端 它通过 HTTP
  • 如何使用 Rundeck API 将文件传递到 Rundeck 作业?

    我有一个带有文件选项的 Rundeck 作业 如何使用 Rundeck HTTP API 和curl 将文件传递到此 Rundeck 作业 我知道如何将文本传递到 Rundeck 文本选项 但我不知道如何将文件传递给 Rundeck 文件选
  • 为什么不必显式声明您可能会抛出一些 Java 内置异常?

    我注意到Integer parseInt 您不必用 try catch 包围它或声明该方法可能会抛出异常 尽管它 抛出 NumberFormatException 为什么我不必明确地捕捉NumberFormatException或者说我的方
  • 如何将 SCRIPT_URI 写入 Apache 的标头?

    我有一个设置 其中有这样的服务器 负载均衡器 gt Apache gt Tomcat 我希望 Apache 将客户端使用的 url 写入标头中 这样一旦我点击 tomcat 就可以读取它 我尝试使用 mod rewrite 和 mod he
  • 无法安装mysql客户端

    我在 django 框架中使用 python3 8 为此我必须安装 mysqlclient 但是当我尝试时出现错误 pip3 install mysqlclient 像这样的输出作为错误 Collecting mysqlclient Usi
  • Matlab将元胞数组保存到文本文件[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 在搜索 mathworks 的网站和这里之后 我也设法找到了应该用于将单元格数据保存到文本文件的代码 但我发现的每个变体都不起作用
  • 使用 HTTParty 进行非常基本的 Rails 4.1 API 调用

    对于 Rails 来说相对较新 我正在尝试调用 API 它应该返回一个唯一的 URL 给我 我的应用程序上捆绑了 HTTParty 我已经创建了一个 UniqueNumber 控制器 并且已经阅读了几份 HTTParty 指南 了解我想要的
  • 我可以在哪里领取 MS Powerpacks 10?

    我无法找到下载 ms Powerpacks 10 的网站 我将其与 vb net 2010 一起使用 Microsoft VisualBasic PowerPacks Vs 10 0 0 0 包含在 Visual Studio 2010 中
  • 在 R 中向 igraph 添加文本

    我有以下代码 感谢 G Grothendieck 的回答 https stackoverflow com questions 69620275 how to display a simple tree in r graphically 69
  • 如何使用 7Zip 创建 xpi 文件?

    我想将我的 Firefox 扩展打包为 xpi 文件 我尝试将其添加到存档并将其命名为 filename xpi 但是当我尝试在 Firefox 上安装它时 收到 程序包已损坏 消息 有什么方法可以创建有效的 xpi 文件吗 我已经安装了
  • Eclipse 更新失败并显示消息“没有足够的访问权限来应用此更新”

    我在 Windows 7 64 位安装下运行 Eclipse 我拥有管理员权限 自从几个月前我第一次安装 Eclipse 以来 我一直能够使其与帮助 gt 检查更新功能 但从几周前开始 它给出了消息 访问权限不足 无法应用此更新 即使当我以
  • Android 函数 View.getHitRect() 提供的值的定义是什么?

    点击父坐标中的矩形 但是 这是什么意思 放大来说 我真正想知道的是 击中矩形 这句话的含义 它是做什么用的 框架是如何处理的 在生命周期中什么时候返回值有意义 它与定义的矩形有何不同getLeft getTop getRight getBo
  • Sequelize.js:连接没有关联的表

    有没有一种方法可以连接没有使用定义关联的表include在续集中 这不是重复的this https stackoverflow com questions 35789512 sequelize joining two tables whic
  • 具有 o(1) 的数组

    我试图找到复杂度为 o 1 的二维数组中的随机子集的总和 大小最大为 array 1000 1000 但让我们以 4 4 作为基本示例 array 4 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 我见过一
  • 使用 Python 图像库调整透明 png 大小和光晕效果

    SO 上有几个类似的问题 但没有一个真正有帮助 基本上我正在尝试调整一个简单的 png 图像的大小 如下所示 http media spiralknights com wiki images 3 3e Equipment Proto Swo