Pillow 更改图片的 RGB 值不起作用
Pillow changing the RGB value of a picture does not work
我正在尝试缩放图像的 rgb 值。
我学习的方法是对每个像素执行 getpixel
和 putpixel
。
import PIL
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFont,ImageDraw
# read image and convert to RGB
image=Image.open("readonly/msi_recruitment.gif")
image=image.convert('RGB')
# build a list of 9 images which have different brightnesses
images=[]
intensity = [0.1, 0.5, 0.9]
channel=[0,1,2]
for c in channel:
for i in intensity:
newImage = PIL.Image.new(image.mode, (image.width, image.height+100))
newImage.paste(image,(0,0))
text="channel {} intensity {}".format(c, i)
font = ImageFont.truetype(r'readonly/fanwood-webfont.ttf', 75)
Draw=ImageDraw.Draw(newImage)
Draw.text((10,470), text, fill="white", font=font, align="left")
for row in range(image.height):
for col in range(image.width):
p = image.getpixel((col, row)) # p as RGB pixel values
if channel == 0:
newImage.putpixel((col, row), (int(p[0]*i),p[1],p[2]))
elif channel == 1:
newImage.putpixel((col, row), (p[0],int(p[1]*i),p[2]))
elif channel == 2:
newImage.putpixel((col, row), (p[0],p[1],int(p[2]*i)))
images.append(newImage)
然而,它不起作用,像素的 RGB 没有改变。
我的代码有什么问题?
有没有一种方法可以将图片的 RGB 值作为一个整体进行缩放,而不是逐个像素地循环?
要修复您的代码,请将 channel
更改为 c
,如下所示:
if c == 0:
newImage.putpixel((col, row), (int(p[0]*i),p[1],p[2]))
elif c == 1:
newImage.putpixel((col, row), (p[0],int(p[1]*i),p[2]))
elif c == 2:
newImage.putpixel((col, row), (p[0],p[1],int(p[2]*i)))
要查看其他方法,请参阅 Mark Setchell 的 。
我正在尝试缩放图像的 rgb 值。
我学习的方法是对每个像素执行 getpixel
和 putpixel
。
import PIL
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFont,ImageDraw
# read image and convert to RGB
image=Image.open("readonly/msi_recruitment.gif")
image=image.convert('RGB')
# build a list of 9 images which have different brightnesses
images=[]
intensity = [0.1, 0.5, 0.9]
channel=[0,1,2]
for c in channel:
for i in intensity:
newImage = PIL.Image.new(image.mode, (image.width, image.height+100))
newImage.paste(image,(0,0))
text="channel {} intensity {}".format(c, i)
font = ImageFont.truetype(r'readonly/fanwood-webfont.ttf', 75)
Draw=ImageDraw.Draw(newImage)
Draw.text((10,470), text, fill="white", font=font, align="left")
for row in range(image.height):
for col in range(image.width):
p = image.getpixel((col, row)) # p as RGB pixel values
if channel == 0:
newImage.putpixel((col, row), (int(p[0]*i),p[1],p[2]))
elif channel == 1:
newImage.putpixel((col, row), (p[0],int(p[1]*i),p[2]))
elif channel == 2:
newImage.putpixel((col, row), (p[0],p[1],int(p[2]*i)))
images.append(newImage)
然而,它不起作用,像素的 RGB 没有改变。
我的代码有什么问题?
有没有一种方法可以将图片的 RGB 值作为一个整体进行缩放,而不是逐个像素地循环?
要修复您的代码,请将 channel
更改为 c
,如下所示:
if c == 0:
newImage.putpixel((col, row), (int(p[0]*i),p[1],p[2]))
elif c == 1:
newImage.putpixel((col, row), (p[0],int(p[1]*i),p[2]))
elif c == 2:
newImage.putpixel((col, row), (p[0],p[1],int(p[2]*i)))
要查看其他方法,请参阅 Mark Setchell 的