Discord.py 使用 Python 图像库进行图像编辑仅适用于某些图片?
Discord.py Image Editing with Python Imaging Library only works for some pictures?
我已经尝试过图像编辑效果,它可以为带有小黑点的图片重新着色,但它只适用于某些图像,老实说我不知道为什么。有什么想法吗?
#url = member.avatar_url
#print(url)
#response = requests.get(url=url, stream=True).raw
#imag = Image.open(response)
imag = Image.open("unknown.png")
#out = Image.new('I', imag.size)
i = 0
width, height = imag.size
for x in range(width):
i+=1
for y in range(height):
if i ==5:
# changes every 5th pixel to a certain brightness value
r,g,b,a = imag.getpixel((x,y))
print(imag.getpixel((x,y)))
brightness = int(sum([r,g,b])/3)
print(brightness)
imag.putpixel((x, y), (brightness,brightness,brightness,255))
i= 0
else:
i += 1
imag.putpixel((x,y),(255,255,255,255))
imag.save("test.png")
如果我的测试有效,这些评论是我会使用的。使用本地 png 也不是一直有效。
您的无效图像没有 alpha 通道,但您的代码假定它有。尝试像这样在打开时强制进入 alpha 通道:
imag = Image.open("unknown.png").convert('RGBA')
另见
还有一些其他想法:
使用 Python for
循环遍历图像缓慢且效率低下 - 通常,尝试找到矢量化 Numpy 替代方案
你有一个 alpha 通道,但到处都将它设置为 255
(即不透明),所以实际上,你也可能没有它并保存大约 1/4 的文件尺码
你的输出图像是 RGB,所有 3 个组件设置相同 - 这实际上是一个灰度图像,所以你可以这样创建它,你的输出文件将是大小的 1/3
因此,这是另一种演绎形式:
#!/usr/bin/env python3
from PIL import Image
import numpy as np
# Load image and ensure neither palette nor alpha
im = Image.open('paddington.png').convert('RGB')
# Make into Numpy array
na = np.array(im)
# Calculate greyscale image as mean of R, G and B channels
grey = np.mean(na, axis=-1).astype(np.uint8)
# Make white output image
out = np.full(grey.shape, 255, dtype=np.uint8)
# Copy across selected pixels
out[1::6, 1::4] = grey[1::6, 1::4]
out[3::6, 0::4] = grey[3::6, 0::4]
out[5::6, 2::4] = grey[5::6, 2::4]
# Revert to PIL Image
Image.fromarray(out).save('result.png')
改变这个:
进入这个:
如果您接受使用常规方法计算灰度,而不是平均 R、G 和 B,您可以更改为:
im = Image.open('paddington.png').convert('L')
并删除进行平均的行:
grey = np.mean(na, axis=-1).astype(np.uint8)
我已经尝试过图像编辑效果,它可以为带有小黑点的图片重新着色,但它只适用于某些图像,老实说我不知道为什么。有什么想法吗?
#url = member.avatar_url
#print(url)
#response = requests.get(url=url, stream=True).raw
#imag = Image.open(response)
imag = Image.open("unknown.png")
#out = Image.new('I', imag.size)
i = 0
width, height = imag.size
for x in range(width):
i+=1
for y in range(height):
if i ==5:
# changes every 5th pixel to a certain brightness value
r,g,b,a = imag.getpixel((x,y))
print(imag.getpixel((x,y)))
brightness = int(sum([r,g,b])/3)
print(brightness)
imag.putpixel((x, y), (brightness,brightness,brightness,255))
i= 0
else:
i += 1
imag.putpixel((x,y),(255,255,255,255))
imag.save("test.png")
如果我的测试有效,这些评论是我会使用的。使用本地 png 也不是一直有效。
您的无效图像没有 alpha 通道,但您的代码假定它有。尝试像这样在打开时强制进入 alpha 通道:
imag = Image.open("unknown.png").convert('RGBA')
另见
还有一些其他想法:
使用 Python
for
循环遍历图像缓慢且效率低下 - 通常,尝试找到矢量化 Numpy 替代方案你有一个 alpha 通道,但到处都将它设置为
255
(即不透明),所以实际上,你也可能没有它并保存大约 1/4 的文件尺码你的输出图像是 RGB,所有 3 个组件设置相同 - 这实际上是一个灰度图像,所以你可以这样创建它,你的输出文件将是大小的 1/3
因此,这是另一种演绎形式:
#!/usr/bin/env python3
from PIL import Image
import numpy as np
# Load image and ensure neither palette nor alpha
im = Image.open('paddington.png').convert('RGB')
# Make into Numpy array
na = np.array(im)
# Calculate greyscale image as mean of R, G and B channels
grey = np.mean(na, axis=-1).astype(np.uint8)
# Make white output image
out = np.full(grey.shape, 255, dtype=np.uint8)
# Copy across selected pixels
out[1::6, 1::4] = grey[1::6, 1::4]
out[3::6, 0::4] = grey[3::6, 0::4]
out[5::6, 2::4] = grey[5::6, 2::4]
# Revert to PIL Image
Image.fromarray(out).save('result.png')
改变这个:
进入这个:
如果您接受使用常规方法计算灰度,而不是平均 R、G 和 B,您可以更改为:
im = Image.open('paddington.png').convert('L')
并删除进行平均的行:
grey = np.mean(na, axis=-1).astype(np.uint8)