基于Python PIL实现简单图片格式转化器

1、简介

提示:阅读本文,默认你对Python有一定了解,并且安装有PIL,对tkinter有一定使用基础。文中所有代码皆在Python3版本上实现,请务必注意

​ Pyhton PIL库提供了许多图片处理功能,理论上可以借助此完成图片格式转换功能,在配合Python tkinter库绘制前端页面,基本上可以实现一个简单图片格式转换器

2、前期资料准备

### 2.1逻辑支持

2.1.1如何实现图片格式转换?

​ Python PIL库提供了许多图片处理功能,现在我们只需要其中一个功能:图片格式转换支持我们实现我们的图片格式转换器。具体如下:

from PIL import Image	# 引入PIL Image提供图片格式转换功能
file_path = 'D:/test/test.png' #测试图片
photo = Image.open(file_path)
photo.save('D:/test/new_test.gif') # save会根据后缀名转换为特定格式

注意:在转换为.jgp格式图片时,需要将图片模式转换为RGB模式,即在save语句之前加上:photo = photo.convert('RGB') 更多参考PIL save语句说明

​ 当然,这里我们必须声明一点:PIL提供的格式转换支持是有限的,具体参考PIL支持图片格式

2.1.2如何保存需要大小的图片?

​ 具体参考:

from PIL import Image	# 引入PIL Image提供图片格式转换功能
file_path = 'D:/test/test.png' #测试图片
photo = Image.open(file_path)
photo = photo.resize((200,300)) # 将图片大小转换为(width,height)200x300大小
photo.save('D:/test/new_test.gif') # save会根据后缀名转换为特定格式

​ 到此,逻辑支持部分基本上够我们实现后端的图片格式转换了。

2.2前端页面支持

2.2.1图片文件选择

​ 通过tkinter.filedialog中的文件选择框组件:askopenfilename()返回打开的图片文件的文件路径,具体参考:

import tkinter.filedialog

file_path = tkinter.filedialog.askopenfilename(title = '选择文件')
print(file_path)

title参数设置文件选择框显示时的窗体标题

2.2.2 保存文件到目标路径

​ 通过tkinter.filedialog中的文件保存框组件:asksaveasfilename()返回保存的图片文件的文件路径,具体参考:

import tkinter.filedialog

file_savepath = tkinter.filedialog.asksaveasfilename(title = '保存文件',filetypes = (('JPG','.jpg'),('PNG','.png')))
print(file_savepath)

title参数设置文件选择框显示时的窗体标题,filetypes参数设置了保存文件时提供的文件格式下拉选项,当前设置会出现如下文件格式选项:

注意:当前只是前端页面提供的保存页面,实际保存文件还是在后端实现

2.2.3预览图片

​ 我们通过一个Label组件实现预览需要转换的图片,为Label中image属性添加为要加载的图片。这里,我们使用PIL中的ImageTk.PhotoImage来加载预览图片,而不tkinter.PhotoImage,主要目的是为了使用Image来裁剪图片来保证预览图片大小一致,防止图片显示不完全。具体参考下面的例子:

import tkinter
from PIL import Image, ImageTk file_path = 'D:/test/test.png' root = tkinter.Tk() photo = ImageTk.PhotoImage(Image.open(file_path).resize((200,300))) # 预览图片大小为200x300 previewPhoto = tkinter.Label(root, image = photo).pack() root.mainloop()

​ 这里,由于需要不断切换Label的image属性,可能会遇到Python tkinter之PhotoImage图片显示问题

2.2.4 待更新

基于Python PIL实现简单图片格式转化器的更多相关文章

  1. Python,PIL压缩裁剪图片

    自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...

  2. C++ 图片格式转化和压缩

    在做人脸识别底库图片导入的时候,需要支持主流的图片的格式,如jpeg.bmp.png等格式.所以需要对图片进行格式转化.图片过大的话,还有进行缩放等.本文介绍的是利用cximage开源库,来进行对图片 ...

  3. 使用Python制作一个简单的刷博器

    呵呵,不得不佩服Python的强大,寥寥几句代码就能做一个简单的刷博器. import webbrowser as web import time import os count=0 while co ...

  4. Python PIL创建文字图片

    PIL库中包含了很多模块,恰当地利用这些模块可以做许多图像处理方面的工作. 下面是我用来生成字母或字符串测试图片而写的类及测试代码. 主要用到的模块: PIL.Image,PIL.ImageDraw, ...

  5. 基于python+requests的简单接口测试

    在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行.以下为简单的接口测试模板: 一.提取常用变量,统一配置 新建一个config.py文件, ...

  6. 基于python创建一个简单的HTTP-WEB服务器

    背景 大多数情况下主机资源只有开发和测试相关人员可以登录直接操作,且有些特定情况"答辩.演示.远程"等这些场景下是无法直接登录主机的.web是所有终端用户都可以访问了,解决了人员权 ...

  7. 用python绘画一些简单图片

    python画笑脸 程序源代码 import turtle #画脸 t = turtle.Pen() t.speed(15) #t.circle(150) #t.color('orange') t.f ...

  8. Newtonsoft.Json 自定义序列化格式转化器

    public static class JsonHelper { static JsonHelper() { Newtonsoft.Json.JsonSerializerSettings settin ...

  9. Python PIL模块笔记

    利用python pil 实现给图片上添加文字 图片中添加文字#-*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont ttfo ...

随机推荐

  1. 面试阿里,美团,京东都会被问到的Spring ,从基础到源码帮你全搞定

    1 前言 Spring是一个轻量级开源框架,它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框 ...

  2. Pinpoint 设置微信或者钉钉预警

    本文基于 Pinpoint 2.1.0 版本 本文大部分内容来自:侠梦的开发笔记 ,但是原文的版本和我的不一致,放在2.1.0是跑不起来的,但是大概逻辑和思路基本一致. 目录 一.接入预警大概思路 二 ...

  3. Improving Commonsense Question Answering by Graph-based Iterative Retrieval over Multiple Knowledge Sources —— 基于多知识库迭代检索的常识问答系统

    基于多知识库迭代检索的问答系统 论文地址 背景 常识问答任务需要引入外部知识来帮助模型更好地理解自然语言问题,现有的解决方案大都采用两阶段框架: 第一阶段 -- 从广泛的知识来源中找到与给定问题相关的 ...

  4. MGR(MySQL Group Replication)部署测试

    1. 环境说明 192.168.11.131 mgr1 主节点 192.168.11.132 mgr2 从节点 192.168.11.133 mgr3 从节点 2. 在mgr1.mgr2.mgr3上安 ...

  5. 检查字符串结尾 判断一个字符串(str)是否以指定的字符串(target)结尾。

    function confirmEnding(str, target) { var arr = str.replace(/\s+/g, ""); var bb = arr.subs ...

  6. [配置]01.IntelliJ IDEA代码格式化与Eclipse保持风格一致

  7. Java基础教程——线程同步

    线程同步 synchronized:同步的 例:取钱 不做线程同步的场合,假设骗子和户主同时取钱,可能出现这种情况: [骗子]取款2000:账户余额1000 [户主]取款2000:账户余额1000 结 ...

  8. 4 种高可用 RocketMQ 集群搭建方案!

    背景 笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能. 随着产品迭代,业务功能越来越多后慢慢也要面对高并发.业务解耦.分布式事务等问题,所 ...

  9. Potato家族本地提权分析

    原文来自SecIN社区-作者:Zeva 0x00 前言 在实际渗透中,我们用到最多的就是Potato家族的提权.本文着重研究Potato家族的提权原理以及本地提权细节 0x01 原理讲解 1.利用Po ...

  10. Spring Cloud 学习 (十) Spring Security, OAuth2, JWT

    通过 Spring Security + OAuth2 认证和鉴权,每次请求都需要经过 OAuth Server 验证当前 token 的合法性,并且需要查询该 token 对应的用户权限,在高并发场 ...