基于Python PIL实现简单图片格式转化器
基于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实现简单图片格式转化器的更多相关文章
- Python,PIL压缩裁剪图片
自己写了用来压缩 DC 照片的,批量处理整目录文件,非常方便.需要安装 PIL #!/usr/bin/env python import Image import os import os.path ...
- C++ 图片格式转化和压缩
在做人脸识别底库图片导入的时候,需要支持主流的图片的格式,如jpeg.bmp.png等格式.所以需要对图片进行格式转化.图片过大的话,还有进行缩放等.本文介绍的是利用cximage开源库,来进行对图片 ...
- 使用Python制作一个简单的刷博器
呵呵,不得不佩服Python的强大,寥寥几句代码就能做一个简单的刷博器. import webbrowser as web import time import os count=0 while co ...
- Python PIL创建文字图片
PIL库中包含了很多模块,恰当地利用这些模块可以做许多图像处理方面的工作. 下面是我用来生成字母或字符串测试图片而写的类及测试代码. 主要用到的模块: PIL.Image,PIL.ImageDraw, ...
- 基于python+requests的简单接口测试
在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行.以下为简单的接口测试模板: 一.提取常用变量,统一配置 新建一个config.py文件, ...
- 基于python创建一个简单的HTTP-WEB服务器
背景 大多数情况下主机资源只有开发和测试相关人员可以登录直接操作,且有些特定情况"答辩.演示.远程"等这些场景下是无法直接登录主机的.web是所有终端用户都可以访问了,解决了人员权 ...
- 用python绘画一些简单图片
python画笑脸 程序源代码 import turtle #画脸 t = turtle.Pen() t.speed(15) #t.circle(150) #t.color('orange') t.f ...
- Newtonsoft.Json 自定义序列化格式转化器
public static class JsonHelper { static JsonHelper() { Newtonsoft.Json.JsonSerializerSettings settin ...
- Python PIL模块笔记
利用python pil 实现给图片上添加文字 图片中添加文字#-*- coding: utf-8 -*- from PIL import Image,ImageDraw,ImageFont ttfo ...
随机推荐
- Codeforces1009F Dominant Indices
dsu on tree 题目链接 点我跳转 题目大意 给定一棵以 \(1\) 为根,\(n\) 个节点的树.设\(d(u,x)\) 为 \(u\) 子树中到 \(u\) 距离为 \(x\) 的节点数. ...
- 从维基百科等网站复制数据和公式到MathType里编辑
在我们写论文的时候,经常会需要用一些实际案例以及数据,而这些数据和案例有很大一部分可以直接在网络上找到.但是有时候也会发现我们想要的内容和公式,从网页上复制粘贴后太模糊,不适合打印和投影.就需要我们将 ...
- php 上传图片,无刷新上传,支持多图上传,远程图片上传
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html ...
- leetcode 108 和leetcode 109
//感想:有时候啊,对于一道题目,如果知道那个点在哪,就会非常简单,比如说这两题,将有序的数组转换为二叉搜索树, 有几个点: 1.二叉搜索树:对于某个节点,它的左节点小于它,它的右节点大于它,这是二叉 ...
- C语言讲义——内存管理
动态分配内存 动态分配内存,在堆(heap)中分配. void *malloc(unsigned int num_bytes); 头文件 stdlib.h或malloc.h 向系统申请分配size个字 ...
- C语言讲义——头文件
头文件.h Dev C++可以建C项目,也可以建C++项目,下面分C和C++两种情况讨论. c.h C语言中,头文件往往不是必须的,只是描述性的文件. 因此,C项目中可以没有.h文件. cpp.h 下 ...
- Java基础教程——垃圾回收机制
垃圾回收机制 Garbage Collection,GC 垃圾回收是Java的重要功能之一. |--堆内存:垃圾回收机制只回收堆内存中对象,不回收数据库连接.IO等物理资源. |--失去使用价值,即为 ...
- C语言中connst用法
1.const一般用来定义只读变量,这个变量的之只能在初始化时赋值,如果初始化时没有赋值,则默认为0.如果在其他地方试图更改此值,编译会报错.如: 1 #include<stdio.h> ...
- moviepy1.03音视频剪辑:使用manual_tracking和headblur实现追踪人脸打马赛克
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在moviepy官网的案例<Tracking and blurring someone's face>和CSDN的moviepy大神uc ...
- PyQt(Python+Qt)学习随笔:QDockWidget停靠部件的setTitleBarWidget方法
setTitleBarWidget方法用于给停靠窗口设置个性化的标题栏,调用语法如下: setTitleBarWidget(QWidget widget) 说明: widget参数可以是任意一个QWi ...