python Pysimplegui调整图像大小

ubof19bj  于 2022-11-28  发布在  Python
关注(0)|答案(2)|浏览(653)

我尝试在pysimplegui中调整图像大小,但它会裁剪图像而不是调整大小。
我的图像元素写为:

ui.Image('{filename}'), size=(50,50)))

结果是:

而原来的样子则是:

我在其他地方看到过建议使用PIL(link)的代码。但是,这个代码看起来比我喜欢的要长得多,我想知道是否有更简单的方法来完成这个任务。

neekobn8

neekobn81#

和平喜调整一个图像的大小,你需要利用枕头库,但你需要导入其他库太为了转换成字节,如果需要,这里是一个例子:

import PIL.Image
import io
import base64

def resize_image(image_path, resize=None): #image_path: "C:User/Image/img.jpg"
    if isinstance(image_path, str):
        img = PIL.Image.open(image_path)
    else:
        try:
            img = PIL.Image.open(io.BytesIO(base64.b64decode(image_path)))
        except Exception as e:
            data_bytes_io = io.BytesIO(image_path)
            img = PIL.Image.open(data_bytes_io)

    cur_width, cur_height = img.size
    if resize:
        new_width, new_height = resize
        scale = min(new_height/cur_height, new_width/cur_width)
        img = img.resize((int(cur_width*scale), int(cur_height*scale)), PIL.Image.ANTIALIAS)
    bio = io.BytesIO()
    img.save(bio, format="PNG")
    del img
    return bio.getvalue()

ui.Image(key="-PHOTO-",size=(50,50) #after some change
elif event == "-IMG-": # the"-IMG-" key is in [ui.I(key="IMG",enable_events=True), ui.FileBrowse()]
        window['-PHOTO-'].update(data=resize_image(value["-IMG-"],resize=(50,50)))

我希望这能帮上忙

c2e8gylq

c2e8gylq2#

Helloooo,这里是我的变通办法来调整pysimplegui中的图像:
1.读取存储在路径“old_path”中的映像。
1.将此图像调整为所需尺寸。
1.将调整大小后的图像作为“png”文件存储在文件夹中。
1.最后显示调整大小后之影像。

old_path = os.path.join(
                values["-FOLDER-"], values["-FILE LIST-"][0]
            )
            #  read image using old_path
            im = cv2.imread(old_path)
            #  resize image to desired dimensions
            im = cv2.resize(im,[700,500])
            # save image to temporary folder (new_path) as png
            new_path ='temp_storage/image_to_show.png'
            cv2.imwrite(new_path,im)
            # update window with new resized image
            window["-IMAGE-"].update(new_path)

如果你需要完整的代码让我知道。图像存储文件夹只存储要显示的图像,它会覆盖每次你选择一个新的图像,所以不用担心图像堆积。
阅读、调整大小和写入所需的cv 2。(或PIL)
祝你好运!

相关问题