标签: python-imaging-library

两张图片之间的红色差异

我是 python 的初学者,做我想做的事情有一些困难。

我想在“找七个不同”游戏中找出两个图像之间的差异。

from PIL import Image
from PIL import ImageChops

a = Image.open("pict1.jpg")
b = Image.open("pict2.jpg")
diff = ImageChops.difference (a, b)
Run Code Online (Sandbox Code Playgroud)

现在我想用红色来阐明这样的差异:

https://i.stack.imgur.com/3cDh3.jpg

https://i.stack.imgur.com/LXgzG.jpg

你能帮助我(和我很棒的英语)吗?:D

python python-imaging-library

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

PIL图像以灰度保存

我正在尝试生成一些分形图像,我可以做得很好。但是,我在保存图像时遇到一些问题,因为它以灰度而不是颜色保存它们。当我用 python 打开它们时,它显示了正确的颜色。

代码如下

from PIL import Image
import ImageDraw
from scipy import misc
from array import *
import matplotlib.pyplot as plt
import scipy

image = Image.new("L",(SIZE, SIZE)) # create a image SIZE x SIZE
d = ImageDraw.Draw(image)
#iterate over x and y, setting a col value for each pixel
d.point((x, y), col ) # it then colors the point (x,y)
image.save("beta"+str(alpha)+".png", "PNG")
Run Code Online (Sandbox Code Playgroud)

我使用的是 macOS X、Python 2.7.5。

python python-imaging-library

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

如何从EXE中提取32x32图标位图数据并将其转换为PIL Image对象?

我正在尝试从 EXE 中提取 32x32 图标,并将位图数据转换为 PILImage对象。我的最终目标是将图标与另一个 32x32 PNG 进行比较,并通过 RMS 获得差异。

我已经尝试win32gui.ExtractIconEx()这样做win32gui.GetIconInfo()并尝试Image.open()这样做,但 PIL 显然不接受 PyHANDLE 对象。我也尝试过直接用打开exe Image.open(),显然这是行不通的。

我现在很困惑,有没有什么办法可以在Python中实现这一点,或者我应该用不同的语言编写这部分代码?

python icons pywin32 python-imaging-library

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

Python高档图像无模糊PIL

在此输入图像描述

我想使用 PIL 升级图像。我已经尝试了所有抗锯齿选项,但没有一个是正确的(实际上我根本不需要抗锯齿)。我不想要任何模糊,但想要与《我的世界》中的纹理包类似的效果。

这个问题之前已经被问过,但是在Java中: How to upscale an image without it getting dirty

解决方案是Bitmap#createScaledBitmap()

有人能给我一个Python的等效函数(请标准库)吗?

任何帮助表示赞赏。

python image antialiasing python-imaging-library

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

将图像保存在 django 的临时文件中

我对 python 和 django 非常陌生。我使用 django 开发了一个项目。这里所有的图像都带有水印。我使用以下代码为所有图像添加了水印......

from PIL import Image
    def image_watermark(request,image_id):
        photo = Photo.objects.get(pk=image_id)
        watermark = Image.open('{0}/{1}'.format(settings.MEDIA_ROOT,'wmark.png'))
        img = Image.open(photo.photo.file)

        img.paste(watermark,(img.size[0]-watermark.size[0],img.size[1]- watermark.size[1]),watermark)

        img.save('{0}/{1}'.format(settings.MEDIA_ROOT,photo.photo.name), quality=80)


        wrapper = FileWrapper(open(photo.photo.url, 'rb'))
        response = StreamingHttpResponse(wrapper, 'image/jpeg')
        response['Content-Length'] = os.path.getsize(photo.photo.url)
        response['Content-Disposition'] = 'attachment; filename=photo.jpg'
        return response
Run Code Online (Sandbox Code Playgroud)

我的所有图像现在都带有水印。但问题是,作为用户,如果我下载这些图像,我发现下载的图像也带有水印,但我想下载实际图像,而不是带水印的图像,我该怎么办解决这个问题?

python django python-imaging-library

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

如何从颜色字典快速更改图像中的像素?

我有一个图像,我想从颜色图中更改图像中的所有颜色,例如。{(10,20,212):(60,40,112)...}

目前,我正在读取图像 OpenCV,然后遍历图像数组并更改每个像素,但这非常慢。

有什么办法可以更快地做到这一点吗?

opencv python-imaging-library python-3.x

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

将 Base64 编码的图像转换为 numpy 数组

我正在通过 base64 编码的 http POST 接收图像。它可以是 JPG 或 BMP。现在我有了图像,我可以在内存中获取它。我找到了如何将它写入磁盘并将其重新读取到一个 numpy 数组中(我实际上需要将它放入一个 torch.tensor 但现在 numpy 就足够了)。

以下是对我有用但效率极低的方法:

import torch
import numpy as np
from PIL import Image
import base64

base64_decoded = base64.b64decode(test_image_base64_encoded)

with open("out.jpg", "wb") as out_file:
    out_file.write(base64_decoded)

image = Image.open("out.jpg")
image_np = np.array(image)
image_torch = torch.tensor(np.array(image))
Run Code Online (Sandbox Code Playgroud)

必须将数组写入 out.jpg 以便在将其重新读取到数组中时,感觉非常无用。一定会有更好的办法。我已经尝试了一些以一维数组结尾的东西......我的图像在我的情况下是一个二维数组(BW图像)。

nparr = np.fromstring(base64.b64decode(test_image), np.uint8)
Run Code Online (Sandbox Code Playgroud)

当 nparr.shape = (694463,) 当 image_np.shape = (2048, 3072) 时会产生

知道我如何表示像 Image.frombase64 :) 这样的 np.array 吗?我知道它不存在,但是如果它可以以某种方式解释“文件”而不必先将其保存到磁盘,那就太好了。

python base64 numpy image python-imaging-library

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

为什么opencv转换颜色空间与pil不同?

我正在尝试使用 opencv 和 PIL 将普通图像转换为灰色和 hsv 颜色空间,但是,我发现结果不一样:

## convert to gray
im_pil = np.array(Image.open(imgpth).convert("L"))
im_cv = cv2.cvtColor(cv2.imread(imgpth), cv2.COLOR_BGR2GRAY)
print(np.sum(im_pil - im_cv))

## convert to hsv
im_pil = np.array(Image.open(imgpth).convert("HSV").split()[0])
im_cv = cv2.cvtColor(cv2.imread(imgpth), cv2.COLOR_BGR2HSV)[:, :, 0]
print(np.sum(im_pil - im_cv))
Run Code Online (Sandbox Code Playgroud)

差异从何而来?我可以使两个结果相同吗?

python opencv image-processing python-imaging-library

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

无法使用 PIL 在 Mac 上打开图像

所以我有一个简短的 python 脚本,它接受一个代表图像的 base64 字符串,然后打开该图像的预览。

这是我的脚本:

#!/usr/local/bin/python3

from PIL import Image
import sys
import base64

IMAGE_NAME = "temp.png"

def do_some_stuff(args):
    if len(args) != 2:
        return

    with open(IMAGE_NAME, "wb") as image_file:
        image_file.write(base64.decodebytes(args[1].encode('ascii')))

    image = Image.open(IMAGE_NAME)
    image.show()


if __name__ == '__main__':
    do_some_stuff(sys.argv)
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常,除了当我有时间显示图像时,我遇到了这个错误:

FSPathMakeRef(/Applications/Preview.app) failed with error -43.

有谁知道为什么会发生此错误或如何修复它?

python macos python-imaging-library

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

AWS lambda 一次将多个图像放入对象

我正在尝试将源图像的大小调整为多个维度 + 扩展名。

例如:当我上传源图像时,比如说 abc.jpg,我需要使用 s3 事件触发器将其大小调整为 .jpg 和 .webp 的大小,例如abc_320.jpg、abc_320.webp、abc_640.jpg、abc_640.webp。因此,使用我当前的 python lambda 处理程序,我可以通过多次put_object调用目标存储桶来完成它,但我想让它更加优化,因为将来我的维度+扩展可能会增加。那么如何通过一次调用将所有调整大小的图像存储到目标存储桶?

当前的 Lambda 处理程序:

import json
import boto3
import os
from os import path
from io import BytesIO
from PIL import Image


# boto3 S3 initialization
s3_client = boto3.client("s3")


def lambda_handler(event, context):
    destination_bucket_name = 'destination-bucket'

    # event contains all information about uploaded object
    print("Event :", event)

    # Bucket Name where file was uploaded
    source_bucket_name = event['Records'][0]['s3']['bucket']['name']

    
    # Filename of object …
Run Code Online (Sandbox Code Playgroud)

python amazon-web-services python-imaging-library boto3 aws-lambda

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