- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要用 alpha 透明度替换 PNG 图像中的所有白色(左右)像素。
我在 AppEngine 中使用 Python,因此无法访问 PIL、imagemagick 等库。AppEngine 确实有一个图像库,但主要用于调整图像大小。
我找到了优秀的小 pyPNG module并设法实现了一个满足我需要的小功能:
主循环的伪代码类似于:
for each pixel:
if pixel looks "quite white":
set pixel values to transparent
otherwise:
keep existing pixel values
并且(假设 8 位值)“非常白”将是:
where each r,g,b value is greater than "240"
AND each r,g,b value is within "20" of each other
这是我第一次以这种方式处理原始像素数据,虽然有效,但性能也非常差。似乎必须有一种更有效的方法来处理数据,而无需以这种方式遍历每个像素? (矩阵?)
我希望在处理这些事情方面有更多经验的人能够指出我在算法中的一些更明显的错误/改进。
谢谢!
最佳答案
这仍然会访问每个像素,但可能会更快:
new_pixels = []
for row in pixels:
new_row = array('B', row)
i = 0
while i < len(new_row):
r = new_row[i]
g = new_row[i + 1]
b = new_row[i + 2]
if r>threshold and g>threshold and b>threshold:
m = int((r+g+b)/3)
if nearly_eq(r,m,tolerance) and nearly_eq(g,m,tolerance) and nearly_eq(b,m,tolerance):
new_row[i + 3] = 0
i += 4
new_pixels.append(new_row)
它避免了 slicen 生成器,后者将为每个像素复制整行像素(每次少一个像素)。
它还通过直接复制输入行来预分配输出行,然后只写入发生变化的像素的alpha值。
甚至更快的方法是根本不分配一组新的像素,而只是直接在源图像中的像素上写入(假设您不需要源图像做任何其他事情)。
关于python - 图像大师 : Optimize my Python PNG transparency function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3045377/
我想要一个具有透明背景的图表,因此 PNG 似乎是一个不错的选择。但是当我设置透明背景时,轴标签的质量急剧下降。我该如何解决?请参阅以下代码。就目前而言,图表具有透明背景,正如我所希望的,但文本质量很
我正在尝试制作一个透明的谷歌图表,但它似乎不起作用。它只是绘制纯白色背景。 有没有人在透明度方面取得成功? 难道我做错了什么? 提前致谢! 谷歌图表信息:solid fill 测试网址: Google
我有一个 subview 已添加到我的 UIView 中。这个想法是 subview 是一个带有 uibuttons 的悬停面板。 subview 的 alpha 值为 0.2,因为用户需要能够看到其
如何在不影响表单控件的情况下更改表单的 alphablend? 德尔福XE7 最佳答案 此问题的一个解决方案是使用多设备应用程序(如果无法使用VCL)。 如果您需要保留透明的TForm,只需更改属性T
嗨,我正在用 mvc4 做我的元素。在我的布局页面中,我有一个透明的 div(#wrapper),最重要的是我有许多非透明的 div。为此,我使用了以下 css 和 html 代码。
我有黑色和透明的简单图像,想将其更改为白色和透明。我想保持透明度(80% 黑色和 20% 透明 >> 80% 白色和 20% 透明,30% 黑色和......)。我尝试了填充桶,但没有成功。 据我所知
我有一组位图。它们在某种程度上都是透明的,我事先不知道哪些部分是透明的。我想从排除透明部分但在正方形中的原始位图中创建一个新位图。我认为这张图片解释了这一点: 我知道如何从现有位图中创建位图,但我不知
我整个下午都在尝试第一次使用 expo-cli 运行 expo build:ios,这样我就可以将我的第一个 expo 应用程序放到 TestFlight 上,但我反复收到错误消息:“你的应用程序图标
我想知道为什么在 Mac OS X 上的滚动条有时是白色透明的,有时是黑色透明的,如果您在常规设置中将“显示滚动条”设置为“滚动时”。所有浏览器(Safari、Chrome、Firefox、Opera
这个问题在这里已经有了答案: Difference between "-webkit-text-fill-color" and "color"? (2 个答案) 关闭 4 年前。
我想为我的应用程序开发一个配置文件屏幕。我正在使用 AppCompactActivity,因为我需要我的应用程序也支持非 Lollipop 设备。我只需要为应用程序中的这个特定 Activity 屏幕
第一个场景: h1{ text-align: center; } td{ width: 100px; height: 100px; border-right: 1px solid gray; bord
我在 Google Earth Engine 中工作,正在尝试创建一种无颜色/完全透明的颜色(无边框和无填充)。下面是一行代码,其中第一种颜色应该是透明的“颜色”。基本上我希望我的最小值根本不显示在
我在HTML5 Canvas 上玩createRadialGradient()。除非我要实现(半)透明性,否则它的工作原理就像一种魅力。 我做了这个jsFiddle以使事情更清晰:http://jsf
我需要从 www.webwoods.co.uk/lsss/index.html(黑色和红色的星星)的网站图标中删除白色背景 有没有办法用常用的图形编辑器(Adobe CC、Paint 等)来做到这一点
我需要使用透明度(背景每隔几秒钟更改一次)找到图像(检测游戏中的文本)。我的脚本: #include HotKeySet("s", "Start") $x = 0 $y = 0 Func Start
环境:WebGL,Chrome。将透明png用作模型的纹理时,我有以下行为: 图片A-树将建筑物隐藏在其后,我看到了世界框纹理。它还隐藏自身(后分支不可见) 同时-图片B-正常运行,窗口是透明的,我看
我正在尝试将水印渲染到视频中。一旦水印的图像文件 (.png) 包含透明度,图像就不再渲染到视频中。如果我将该图像转换为 .jpg 然后再转换回 .png,效果很好。如果我创建一个没有透明度的新 pn
我正在使用tilemill来生成mbtile。有人知道如何使mbtiles背景透明吗? 最佳答案 您的默认样式将具有类似的规则 Map { background-color:#f00; } 这为
我有一个奇怪的问题,我在尝试在 WebGL 中进行混合时无法弄清楚。黑色呈现为完全透明,所有带有灰色阴影的内容也呈现为半透明。我已经将它设置为使用 alpha channel 作为透明度的来源,并且在
我是一名优秀的程序员,十分优秀!