我认为这个问题与Zope无关.尽管如此,我还是要解释一下我要做的事情:
我在Zope中使用PUT_factory将图像上传到每个FTP的ZODB.上传的图像将作为Zope Image保存在新创建的容器对象中.这工作正常,但我想调整图像大小,如果它超过一定的大小(宽度和高度).所以我使用PIL的缩略图功能来调整它们的大小,即200x200.只要上传的图像相对较小,这就可以正常工作.我没有查看确切的限制,但976x1296px仍然可以.
随着更大的图片,我得到:
Module PIL.Image, line 1559, in thumbnail
Module PIL.ImageFile, line 201, in load
IOError: image file is truncated (nn bytes not processed).
Run Code Online (Sandbox Code Playgroud)
我从相机测试了很多jpeg.我不认为它们都被截断了.
这是我的代码:
if img and img.meta_type == 'Image':
pilImg = PIL.Image.open( StringIO(str(img.data)) )
elif imgData:
pilImg = PIL.Image.open( StringIO(imgData) )
pilImg.thumbnail((width, height), PIL.Image.ANTIALIAS)
Run Code Online (Sandbox Code Playgroud)
因为我正在使用PUT_factory,所以我没有文件对象,我使用的是工厂的原始数据或以前创建的(Zope)Image对象.
我听说PIL在超过一定大小时处理图像数据的方式不同,但我不知道如何调整代码.或者它与PIL的延迟加载有关?
我正在研究PIL并且需要知道在调整图像大小或缩略图像时是否可以调整图像质量.据我所知,默认质量设置为85.可以在调整大小期间调整此参数吗?
我目前正在使用以下代码:
image = Image.open(filename)
image.thumbnail((x, y), img.ANTIALIAS)
Run Code Online (Sandbox Code Playgroud)
该ANTIALIAS参数可能提供最佳质量.我需要知道我们是否可以在质量选项上获得更多粒度.
我正在使用Python Imaging Library进行一些非常简单的图像处理,但是我无法将灰度图像转换为单色(黑白)图像.如果我在将图像更改为灰度(转换('L'))后保存,则图像呈现为您所期望的.但是,如果我将图像转换为单色,单波段图像,它只会给我噪声,如下图所示.有没有一种简单的方法可以使用PIL/python将彩色png图像转换为纯黑白图像?
from PIL import Image
import ImageEnhance
import ImageFilter
from scipy.misc import imsave
image_file = Image.open("convert_image.png") # open colour image
image_file= image_file.convert('L') # convert image to monochrome - this works
image_file= image_file.convert('1') # convert image to black and white
imsave('result_col.png', image_file)
Run Code Online (Sandbox Code Playgroud)

我尝试使用PIL在我的django应用程序中使用PIL进行一些JPEG工作,但是我得到了这个IOError ..不知道该怎么做.
""decoder jpeg not available""
Run Code Online (Sandbox Code Playgroud)
我错过了服务器上的JPEG解码器吗?如果是这样,我该如何解决?
我正在尝试将UploadedFile一个PIL Image对象转换为缩略图,然后将Image我的缩略图函数返回的PIL 对象转换回一个File对象.我怎样才能做到这一点?
python django django-file-upload django-uploads python-imaging-library
我有以下代码:
print(img.size)
print(10 * img.size)
Run Code Online (Sandbox Code Playgroud)
这将打印
(70, 70)
(70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70)
Run Code Online (Sandbox Code Playgroud)
虽然我想要它打印
(700, 700)
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,而不必写
print(10 * img.size[0], 10 * img.size[1])
Run Code Online (Sandbox Code Playgroud)
PS:img.size是一个PIL图像.Dunno,如果在这种情况下重要的话.
我正在使用烧瓶进行申请.我想将一个图像(由PIL动态生成)发送到客户端而不保存在磁盘上.
知道怎么做吗?
python streaming temporary-files python-imaging-library flask
我正在尝试使用Python将多页PDF转换为一系列JPEG.我可以使用可用的工具轻松地将PDF分割成单独的页面,但我无法找到任何可以将PDF转换为图像的内容.
PIL不起作用,因为它无法读取PDF.我发现的两个选项是通过shell使用GhostScript或ImageMagick.这对我来说不是一个可行的选择,因为这个程序需要跨平台,我不能确定这些程序中是否有任何一个可以安装和使用它们.
有没有可以做到这一点的Python库?
PIL的新手,但希望得到一个快速的解决方案.以下是我的第一个从未奏效的镜头:
import cStringIO
import pylab
from PIL import Image
pylab.figure()
pylab.plot([1,2])
pylab.title("test")
buffer = cStringIO.StringIO()
pylab.savefig(buffer, format='png')
im = Image.open(buffer.read())
buffer.close()
Run Code Online (Sandbox Code Playgroud)
错误说,
Traceback (most recent call last):
File "try.py", line 10, in <module>
im = Image.open(buffer.read())
File "/awesomepath/python2.7/site-packages/PIL/Image.py", line 1952, in open
fp = __builtin__.open(fp, "rb")
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我不希望解决方案涉及额外的包,谢谢.
是否有一个简单的解决方案来修剪PIL中的图像空白?
ImageMagick通过以下方式轻松支持它:
convert test.jpeg -fuzz 7% -trim test_trimmed.jpeg
Run Code Online (Sandbox Code Playgroud)
我找到了PIL的解决方案:
from PIL import Image, ImageChops
def trim(im, border):
bg = Image.new(im.mode, im.size, border)
diff = ImageChops.difference(im, bg)
bbox = diff.getbbox()
if bbox:
return im.crop(bbox)
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案有缺点:
border颜色,这对我来说不是什么大问题,我的图像有白色背景-fuzz密钥.添加一些模糊裁剪.因为我可以有一些jpeg压缩工件和不需要的巨大阴影.可能PIL有一些内置的功能吗?还是有一些快速解决方案?
python ×10
django ×2
imagemagick ×2
flask ×1
image ×1
jpeg ×1
libjpeg ×1
matplotlib ×1
pdf ×1
python-2.7 ×1
redhat ×1
streaming ×1
zope ×1