
自用图片剪切压缩工具
在服务器配置不够高时,为了提高网站访问速度,对图片进行压缩、格式修改和剪切操作是十分必要的。本文将介绍一款图片压缩工具,它能满足这些需求。
一、工具功能
- 自动压缩并转换格式
- 此工具会自动将传入的照片根据入参压缩成webp格式。这种格式在保证一定图片质量的同时,能够显著减小图片大小,非常适合用于网页加载,有助于提高网站访问速度。
- 图片剪切功能(可选)
- 如果需要做文章封面等操作,可以勾选“开启等比例缩放”选项(文中未提及,但推测是与剪切相关的操作),实现对图片的合理裁剪。
二、传图方式
- 选择本地图片
- 直接点击工具界面上的“选择图片并压缩”按钮,即可从本地文件夹中选择需要处理的图片。操作简单直观,方便用户快速定位本地图片资源。
- 使用粘贴板传图
- 支持直接使用
Ctrl + V
快捷键。工具会自动获取粘贴板里的图片,无需用户手动保存再上传,大大提高了传图效率。
- 支持直接使用
三、保存路径
- 图片传入后,工具会自动处理并将处理完的图片保存在桌面。无需用户确认保存路径,简化了操作流程,节省了用户时间。
四、工具界面参数说明
- 压缩质量设置
- 工具界面中有一个输入框,提示“请输入压缩质量(0 - 100,留空默认80)”。用户可以根据需要在0到100之间输入数值来调整图片的压缩质量。默认值为80,在保证图片质量和压缩率之间取得了较好的平衡。
- 目标分辨率设置
- 还有一个输入框提示“请输入目标分辨率(宽度高度,留空默认1612921)”。用户可以自定义图片压缩后的目标分辨率,若留空则按照默认的1612*921分辨率进行压缩。
这款图片压缩工具在处理图片方面具有操作简单、功能实用的特点,无论是对于网站优化还是日常图片处理都非常有帮助。
源码:
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageGrab
import io
import time
import os
def compress_image(event=None):
try:
quality_str = quality_entry.get().strip()
if quality_str:
try:
quality = int(quality_str)
if quality < 0 or quality > 100:
result_label.config(text="压缩质量参数应在0 - 100之间,请重新输入。")
return
except ValueError:
result_label.config(text="请输入有效的整数作为压缩质量参数。")
return
else:
quality = 80 # 默认压缩质量
target_resolution_str = resolution_entry.get().strip()
if scale_checkbox_var.get() == 1 and target_resolution_str:
try:
target_width_str, target_height_str = target_resolution_str.split('*')
target_width = int(target_width_str)
target_height = int(target_height_str)
except ValueError:
result_label.config(text="请输入正确格式的分辨率参数(格式如:宽度*高度)。")
return
else:
target_width = None
target_height = None
if event is None: # 通过按钮点击触发,弹出文件选择对话框让用户选择图片
file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.png;*.jpg;*.jpeg")])
if file_path:
image = Image.open(file_path)
else:
return
else: # 通过Ctrl+V快捷键触发,处理粘贴板中的图片
image_data = ImageGrab.grabclipboard()
if image_data is not None:
if isinstance(image_data, Image.Image):
image = image_data
else:
image = Image.open(io.BytesIO(image_data))
else:
return
# 图片转换为RGB模式
image = image.convert('RGB')
if target_width is not None and target_height is not None:
width, height = image.size
if width / height > target_width / target_height:
new_height = int(height * target_width / width)
new_width = target_width
else:
new_width = int(width * target_height / height)
new_height = target_height
image = image.resize((new_width, new_height), Image.ANTIALIAS)
desktop_path = os.path.join(os.path.expanduser('~'), 'Desktop') + os.path.sep
file_name = f'lo_{time.strftime("%Y%m%d%H%M%S")}.webp'
new_file_path = os.path.join(desktop_path, file_name)
image.save(new_file_path, format='webp', quality=quality)
result_label.config(text=f"图片已成功压缩并保存为: {new_file_path}")
except Exception as e:
result_label.config(text=f"操作失败: {e}")
# 创建主窗口
root = tk.Tk()
root.title("图片压缩工具")
root.geometry('400x380')
# 设置背景颜色和整体布局
root.configure(bg='#F4F7FB')
# 创建主框架,背景颜色和样式
main_frame = tk.Frame(root, bg='#FFFFFF', bd=0, relief=tk.SOLID, padx=20, pady=20)
main_frame.pack(padx=20, pady=20, fill=tk.BOTH, expand=True)
# 创建按钮,按钮样式现代化
compress_button = tk.Button(main_frame, text="选择图片并压缩", command=compress_image,
bg='#4CAF50', fg='white', font=('Arial', 12, 'bold'), relief=tk.RAISED, bd=3,
padx=20, pady=10, highlightthickness=0, activebackground='#45a049', activeforeground='white')
compress_button.pack(pady=15)
# 创建标签用于显示操作结果
result_label = tk.Label(main_frame, text="", bg='#FFFFFF', fg='black', font=('Arial', 10))
result_label.pack(pady=10)
# 创建输入框及对应标签,用于输入压缩质量参数
quality_label = tk.Label(main_frame, text="请输入压缩质量(0 - 100,留空默认80):",
bg='#FFFFFF', fg='black', font=('Arial', 10))
quality_label.pack(pady=5)
quality_entry = tk.Entry(main_frame, bg='#F4F7FB', fg='black', font=('Arial', 10), relief="solid", bd=1)
quality_entry.pack(pady=5)
quality_entry.insert(0, "80") # 默认值
# 创建输入框及对应标签,用于输入目标分辨率
resolution_label = tk.Label(main_frame, text="请输入目标分辨率(宽度*高度,留空默认1612*921):",
bg='#FFFFFF', fg='black', font=('Arial', 10))
resolution_label.pack(pady=5)
resolution_entry = tk.Entry(main_frame, bg='#F4F7FB', fg='black', font=('Arial', 10), relief="solid", bd=1)
resolution_entry.pack(pady=5)
resolution_entry.insert(0, "1612*921") # 默认值
# 创建复选框,控制是否开启等比例缩放功能
scale_checkbox_var = tk.IntVar()
scale_checkbox = tk.Checkbutton(main_frame, text="开启等比例缩放", variable=scale_checkbox_var,
bg='#FFFFFF', fg='black', font=('Arial', 10))
scale_checkbox.pack(pady=5)
# 绑定快捷键Ctrl+V触发压缩
root.bind("<Control-v>", compress_image)
# 运行主窗口事件循环
root.mainloop()
本文是原创文章,完整转载请注明来自 Lo
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果