我想在其中绘制一个矩形和一个文本,这是我的代码的一部分,它有点混淆:
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
from PIL import ImageEnhance
source_img = Image.open(file_name).convert("RGB")
img1 = Image.new("RGBA", img.size, (0,0,0,0))
draw1 = ImageDraw.Draw(watermark, "RGBA")
draw1.rectangle(((0, 00), (100, 100)), fill="black")
img_rectangle = Image.composite(img1, source_img, img1)
draw2 = ImageDraw.Draw(img1, "RGBA")
draw2.text((20, 70), "something123", font=ImageFont.truetype("font_path123"))
Image.composite(img1, source_img, img1).save(out_file, "JPEG")
Run Code Online (Sandbox Code Playgroud)
这将它们两者绘制,但它们是分开的:文本在矩形下面.而我希望在矩形内绘制文本.我怎样才能做到这一点?如果我一定撰写他们还是什么?
我有一个原始图像,其中每个像素对应一个16位无符号整数.我试图使用PIL Image.fromstring()函数读取,如下面的代码:
if __name__ == "__main__":
if (len(sys.argv) != 4):
print 'Error: missing input argument'
sys.exit()
file = open(sys.argv[1], 'rb')
rawData = file.read()
file.close()
imgSize = (int(sys.argv[2]), int(sys.argv[3]))
# Use the PIL raw decoder to read the data.
# - the 'F;16' informs the raw decoder that we are reading a little endian, unsigned integer 16 bit data.
img = Image.fromstring('L', imgSize, rawData, 'raw', 'F;16')
im.save('out.png')
Run Code Online (Sandbox Code Playgroud)
PIL文档通知fromstring()函数的第一个参数是'mode'.然而,看文档和谷歌搜索,我无法找到有关该论点真正意义的细节(我相信它与色彩空间或类似的东西有关).有谁知道我在哪里可以找到关于fromstring()函数的更详细的参考以及mode参数的含义?
假设我在列表中有一个像素列表(表示为具有3个RGB值的元组)list(im.getdata()),如下所示:
[(0,0,0),(255,255,255),(38,29,58)...]
Run Code Online (Sandbox Code Playgroud)
如何使用此格式使用RGB值(每个元组对应一个像素)创建新图像?
谢谢你的帮助.
我想在pillow-python中调整图像大小,但是我有两个选择使用的函数:
Image.resize http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image.Image.resize
和
Image.thumbnail
http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image.Image.thumbnail
这两个定义都指出要调整图像的大小,我应该使用哪一个?
使用Python PIL,我正在尝试调整给定图像的色调.
我对图形的术语不太满意,所以我所说的"调整色调"就是做了名为"Hue/saturation"的Photoshop操作:这是统一改变图像的颜色,如下所示:



仅供参考,Photoshop为此色调设置使用-180到+180的比例(其中-180等于+180),这可能代表HSL色调比例(以0-360度表示).
我正在寻找的是一个函数,给定PIL图像和[0,1]内的浮动色调(或[0,360]内的int,无关紧要),返回图像,其色调被移位如上例所示的色调.
到目前为止我所做的是荒谬的,显然没有给出理想的结果.它只是将原始图像与填充颜色的图层混合了一半.
import Image
im = Image.open('tweeter.png')
layer = Image.new('RGB', im.size, 'red') # "hue" selection is done by choosing a color...
output = Image.blend(im, layer, 0.5)
output.save('output.png', 'PNG')
Run Code Online (Sandbox Code Playgroud)
(请不要笑)结果: 
提前致谢!
解决方案:这里更新了unutbu代码,因此它完全符合我的描述.
import Image
import numpy as np
import colorsys
rgb_to_hsv = np.vectorize(colorsys.rgb_to_hsv)
hsv_to_rgb = np.vectorize(colorsys.hsv_to_rgb)
def shift_hue(arr, hout):
r, g, b, a = np.rollaxis(arr, axis=-1)
h, s, v = rgb_to_hsv(r, g, b) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Python中读取二进制文件(8位RGB元组),对其进行一些转换然后将其写为png图像.我正在做以下事情:
typeinfo = np.dtype('>i1' ) #read single bytes
data=np.fromfile(("f%05d.txt" %(files[ctr])),dtype=typeinfo)
data=np.reshape(data,[linesperfile,resX,3]) #reshape to size/channels
Run Code Online (Sandbox Code Playgroud)
如果我显示它的类型信息data说:
<type 'numpy.ndarray'>
(512L, 7456L, 3L)
Run Code Online (Sandbox Code Playgroud)
然后我对图像进行一些操作(就地),之后我想将Image写入文件.目前我使用:
import PIL.Image as im
svimg=im.fromarray(data)
svimg.save(("im%05d"%(fileno)),"png")
Run Code Online (Sandbox Code Playgroud)
但它一直给我以下错误:
line 2026, in fromarray
raise TypeError("Cannot handle this data type")
TypeError: Cannot handle this data type
Run Code Online (Sandbox Code Playgroud)
任何想法如何做到这一点?
我有4个目录,包含动画图像.我想拍摄一组图像并生成一个图像,其中4个图像排列成动画的每个帧的2x2网格.
到目前为止我的代码是:
import Image
fluid64 = "Fluid64_half_size/00"
fluid128 = "Fluid128_half_size/00"
fluid512 = "Fluid512_half_size/00"
fluid1024 = "Fluid1024_half_size/00"
out_image = "Fluid_all/00"
for pic in range(1, 26):
blank_image = Image.open("blank.jpg")
if pic < 10:
image_num = "0"+str(pic)
else:
image_num = str(pic)
image64 = Image.open(fluid64+image_num+".jpg")
image128 = Image.open(fluid128+image_num+".jpg")
image512 = Image.open(fluid512+image_num+".jpg")
image1024 = Image.open(fluid1024+image_num+".jpg")
out = out_image + image_num + ".jpg"
blank_image.paste(image64, (0,0)).paste(fluid128, (400,0)).paste(fluid512, (0,300)).paste(fluid1024, (400,300)).save(out)
Run Code Online (Sandbox Code Playgroud)
不知道为什么它不起作用.我收到错误:
Traceback (most recent call last):
File "C:\Users\Casey\Desktop\Image_composite.py", line 24, in <module>
blank_image.paste(image64, (0,0)).paste(fluid128, (400,0)).paste(fluid512, (
ste(fluid1024, (400,300)).save(out) …Run Code Online (Sandbox Code Playgroud) 我正在尝试动态缩放文本以放置在不同但已知尺寸的图像上.该文本将作为水印应用.有没有办法缩放与图像尺寸相关的文本?我不要求文本占据整个表面区域,只要足够可见,以便易于识别且难以移除.我正在使用Python Imaging Library 1.1.7版.在Linux上.
我希望能够设置文本大小与图像尺寸的比例,比如大小的1/10.
我一直在寻找字体大小属性来改变大小但我没有运气来创建算法来扩展它.我想知道是否有更好的方法.
有关如何实现这一目标的任何想法?
谢谢
python fonts scaling image-manipulation python-imaging-library
我正在为我的Django项目使用Ubuntu和VitualEnv.
我使用Synaptic Package Manager安装了PIL库,它运行正常.但是当我创建一个VitrualEnv并尝试使用pip安装PIL它安装但我得到这个奇怪的行为:
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
To add a missing option, make sure you have the required
library, and set the corresponding ROOT variable in the
setup.py script.
Run Code Online (Sandbox Code Playgroud)
我希望我可以使用requirements.txt来获取所有依赖项,但可能是PIL必须以某种方式手动安装......但是如何?
编辑:谢谢John Keyes,你是对的,我跑:
sudo ln -s …Run Code Online (Sandbox Code Playgroud) 我知道PIL已被弃用,所以我安装了Pillow,为了向后兼容的原因,Pillow仍然使用PIL作为其模块名称.这是我的pip冻结看起来像Pillow: Pillow = 3.2.0
这是我在代码中使用它的方式:
import PIL as pillow
from PIL import Image
Run Code Online (Sandbox Code Playgroud)
正如有人在类似的帖子中建议的那样,我也试过了
import PIL
from PIL import Image
Run Code Online (Sandbox Code Playgroud)
两者都不起作用.两个都给我这个错误:
ImportError: No module named PIL
Run Code Online (Sandbox Code Playgroud)
另外,我试过:
import Image
Run Code Online (Sandbox Code Playgroud)
它给了我:
ImportError: No module named Image
Run Code Online (Sandbox Code Playgroud)
非常感谢帮助!