标签: python-imaging-library

在 PIL 中包裹文本并调整字体到容器?

我想创建一个用于制作宾果游戏的程序,除了将文本(范围可以从单个单词到甚至整个句子)放入每个字段之外,我已经设置了所有内容。我将如何包装该文本并调整字体大小以使其适合每个字段?

python python-imaging-library

1
推荐指数
1
解决办法
1878
查看次数

在已知坐标的图像顶部应用浅透明蒙版

我以这种方式将坐标存储在 x 轴和 y 轴中。

rects= [[715, 49], [716, 49], [711, 50], [712, 50], [713, 50],...]
image= cv2.imread("some_image.jpg")
Run Code Online (Sandbox Code Playgroud)

如何将浅透明的彩色图层添加到存储rectsimage类似于下面汽车顶部的蓝色图层的坐标中?

在此输入图像描述

python opencv image python-imaging-library

1
推荐指数
1
解决办法
1141
查看次数

枕头调整图像大小 - 保持纵横比

我有以下示例,我希望使用 Pillow 调整图像大小。

正如您所看到的,我有用户传入的新宽度,但没有高度。我如何计算出该图像的新高度,同时保持相同的纵横比?

图像不是正方形,而是矩形,因此高度和宽度不会相同。

    orig_image = Image.open(get_full_path(file.relative_path))
    new_width = int(request.args.get('w'))

    # TODO resize properly, we need to work out new image height
    resized_image = orig_image.resize((new_width, ), Image.ANTIALIAS)
Run Code Online (Sandbox Code Playgroud)

python python-imaging-library

1
推荐指数
1
解决办法
4238
查看次数

PIL 将文本添加到 gif 帧会增加图片的噪点

我正在使用 PIL 创建一个简单的 GIF 动画:

from PIL import Image, ImageDraw, ImageFont

images = []

for x, i in enumerate(range(10)):
    image = Image.new(mode="RGB", size=(320, 60), color="orange")

    draw = ImageDraw.Draw(image)
    fnt = ImageFont.truetype('font.ttf', size=10)
    draw.text((10, 10), ("%s" % x), fill=(0, 0, 255), font=fnt)
    images.append(image)

images[0].save("result/pil.gif", save_all=True, append_images=images[1:], duration=1000, loop=0, format="GIF")
Run Code Online (Sandbox Code Playgroud)

问题是,每当我使用 Draw.text 时,图像的背景就会出现某种白色:

在此输入图像描述

我发现一些信息,我必须使用第一帧中的 getpalette 和所有其他帧的 putpalette ,如下所示:

for x, i in enumerate(range(10)):
    image = Image.new(mode="RGB", size=(320, 60), color="orange")

    if x == 0:
        palette = image.getpalette()
    else:
        image.putpalette(palette)
Run Code Online (Sandbox Code Playgroud)

但它只是给了我:ValueError: illegal image …

python gif animated-gif python-imaging-library

1
推荐指数
1
解决办法
1439
查看次数

使用 Pillow 将矩形映射到四边形

我正在尝试编写一个Python程序,它接受输入图像(例如JPEG)并生成“地球仪组件”输出图像,类似于le Paper Globe。本质上,如果输出图像被打印、剪切、折叠和粘合,人们应该获得投影到粗糙球体上的原始图像。

该程序会将输入图像划分为 32 个(8 个水平,4 个垂直)矩形,然后将每个矩形映射到一些精心选择的梯形上,或者更一般地说,映射到四边形上。我找到了一种将四边形映射到正方形的Pillow/PIL 方法,但找不到将矩形映射到四边形的方法。

有谁知道如何在Python中将输入图像的矩形映射到输出图像的四边形上?我更喜欢 Pillow/PIL,但任何可以打开和保存 JPEG 的库都可以。

python python-imaging-library

1
推荐指数
1
解决办法
1886
查看次数

无法从Python中的EXIF数据获取GPS坐标(Pillow或pyexiv2)

我正在尝试从JPG图像中提取 GPS 坐标,但我没有获得太多信息pillow

这是我的第一次尝试:

from PIL import Image
from PIL.ExifTags import TAGS

my_img = Image.open("IMG_0547.jpg")

exif_data = my_img.getexif()
for tag_id in exif_data:
    tag = TAGS.get(tag_id, tag_id)
    data = exif_data.get(tag_id)

    print(f"{tag:16}: {data}")
Run Code Online (Sandbox Code Playgroud)

输出:

TileWidth       : 512
TileLength      : 512
GPSInfo         : 1996
ResolutionUnit  : 2
ExifOffset      : 216
Make            : Apple
Model           : iPhone XS
Software        : 13.6
Orientation     : 1
DateTime        : 2020:08:13 21:01:41
XResolution     : 72.0
YResolution     : 72.0
Run Code Online (Sandbox Code Playgroud)

从这里下载图像

我也尝试过使用pyexiv2,但只有一行代码出现此错误 metadata …

python gps exif python-imaging-library pyexiv2

1
推荐指数
1
解决办法
1164
查看次数

如何剪出透明背景?

我有这个图像:

在此输入图像描述

并且,想像这样剪掉透明背景:

在此输入图像描述

使用 PIL 将会是:

from PIL import Image
im = Image.open("image")
im.getbbox()
im2 = im.crop(im.getbbox())
im2.save("result")
Run Code Online (Sandbox Code Playgroud)

但是,如何使用 OpenCV 变体来做到这一点?

python opencv image-processing python-imaging-library

1
推荐指数
1
解决办法
1069
查看次数

从维基百科下载某些图像会导致意外的 UnidentifiedImageError

到目前为止,我一直在使用 PIL 和 requests 库下载某些维基百科图像,没有出现任何问题。在某些时候,某处发生了更改,现在我在尝试下载和加载以下图像时收到错误:

from PIL import Image
import requests

url_1 = "https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/" \
    + "Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg/2728px-Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg"

#url_2 = "https://upload.wikimedia.org/wikipedia/commons/9/9d/The_Scream_by_Edvard_Munch%2C_1893_-_Nasjonalgalleriet.png"

#url_3 = "https://upload.wikimedia.org/wikipedia/en/8/8f/Pablo_Picasso%2C_1909-10%2C_Figure_dans_un_Fauteuil_%28Seated_Nude%" \
#    + "2C_Femme_nue_assise%29%2C_oil_on_canvas%2C_92.1_x_73_cm%2C_Tate_Modern%2C_London.jpg"


response = requests.get(url_1, stream=True)
img = Image.open(response.raw)
Run Code Online (Sandbox Code Playgroud)

以及由此产生的错误消息:

---------------------------------------------------------------------------

UnidentifiedImageError                    Traceback (most recent call last)

<ipython-input-2-9f0ecb1762aa> in <module>()
     13 
     14 response = requests.get(url_1, stream=True)
---> 15 img = Image.open(response.raw)

/usr/local/lib/python3.7/dist-packages/PIL/Image.py in open(fp, mode)
   2894         warnings.warn(message)
   2895     raise UnidentifiedImageError(
-> 2896         "cannot identify image file %r" % (filename if filename else fp)
   2897     ) …
Run Code Online (Sandbox Code Playgroud)

python python-imaging-library python-requests

1
推荐指数
1
解决办法
963
查看次数

来自(时间戳,值)元组列表的均匀间隔的一系列值

我被困在这个问题上,因为我不太确定如何提出这个问题,所以这是我最好的尝试!

我有一个元组列表,代表特定时间戳的温度读数。

[
  (datetime.datetime(2022, 11, 30, 8, 25, 10, 261853), 19.82),
  (datetime.datetime(2022, 11, 30, 8, 27, 22, 479093), 20.01),
  (datetime.datetime(2022, 11, 30, 8, 27, 36, 984757), 19.96),
  (datetime.datetime(2022, 11, 30, 8, 36, 46, 651432), 21.25),
  (datetime.datetime(2022, 11, 30, 8, 41, 27, 230438), 21.42),
  ...
  (datetime.datetime(2022, 11, 30, 11, 57, 4, 689363), 17.8)
]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,记录之间的差异无处不在 - 有些相隔几秒钟,而另一些则相隔几分钟。

从这些中,我想创建一个新的元组列表(或其他数据结构 - 我很高兴使用 NumPy 或 Pandas),其中时间戳值恰好每 5 分钟一次,而温度读数则计算为该时间戳的假设值鉴于可用数据。像这样的东西:

[
  (datetime.datetime(2022, 11, 30, 8, 25, 0, 0), ??),
  (datetime.datetime(2022, 11, 30, 8, 30, …
Run Code Online (Sandbox Code Playgroud)

python numpy python-imaging-library pandas

1
推荐指数
1
解决办法
44
查看次数

使用Pycairo动态生成图像并在Django中提供服务

我想用Pycairo生成一个动态创建的png图像,然后用它来设置Django.我读到这个:使用Django提供动态生成的图像.

有没有办法将Pycairo表面的数据直接传输到HTTP响应中?我现在这样做:

data = surface.to_rgba()
im = Image.frombuffer ("RGBA", (width, height), data, "raw", "RGBA", 0,1)
response = HttpResponse(mimetype="image/png")
im.save(response, "PNG")
return response
Run Code Online (Sandbox Code Playgroud)

但它实际上不起作用,因为没有to_rgba调用(这个调用我发现使用谷歌代码,但不起作用).

编辑:to_rgba可以用正确的调用get_data()替换,但我仍然想知道我是否可以完全绕过PIL.

python django image python-imaging-library pycairo

0
推荐指数
1
解决办法
2091
查看次数