我想編輯 PNG 影像的所有像素,除了透明像素。我有這個代碼:
img_da_maskerare = Image.open("temp.png")
width = img_da_maskerare.size[0]
height = img_da_maskerare.size[1]
for i in range(0,width):
for j in range(0,height):
data = img_da_maskerare.getpixel((i,j))
#print(data) #(255, 255, 255)
if (data[0]!=255 and data[1]!=0 and data[2]!=0):
img_da_maskerare.putpixel((i,j),(00, 00, 00))
img_da_maskerare.show()
例子:
僅供參考,這需要 337 微秒,而基于回圈的方法需要 166 毫秒,即它的速度大約快 500 倍,并且沒有回圈和索引出錯。
我提到你可以使用Numpy,所以這里使用它做的事情大致相同:
import numpy as np
# Open image and make into Numpy array
na = np.array(Image.open('Ow40z.png'))
# Make every pixel, of every row of every column black in RGB channels, i.e. channel 0, 1, 2
na[:, :, :3] = 0
# Make Boolean True/False mask of all alphas > 200
mask = na[:,:,3] > 200
# Set alpha channel to 255 wherever mask is True, and 0 elsewhere
na[:, :, 3] = mask * 255
# Convert back from Numpy array to PIL Image
pilImage = Image.fromarray(na)
uj5u.com熱心網友回復:
if data[3] == 255
的data長度4代表RGBA。其中Aalpha 表示像素的不透明度。其值從0到255。0表示完全透明,255表示完全不透明。在這里,我曾經data[3] > 200也包括那些具有輕微透明度的像素。
代碼代碼更改
為
# import PIL module
from PIL import Image
img_da_maskerare = Image.open("temp.png")
width = img_da_maskerare.size[0]
height = img_da_maskerare.size[1]
for i in range(0,width):
for j in range(0,height):
data = img_da_maskerare.getpixel((i,j))
# RGBA = Red, Green, Blue, Alpha
# Alpha = 0 = transparent, 255 = opaque
# alpha > 200 means almost opaque
if data[3] >= 200:
img_da_maskerare.putpixel((i,j),(00, 00, 00))
img_da_maskerare.save('temp_maskerad.png')
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498052.html
上一篇:圖片在網頁上加載非常緩慢
