python-分享篇-用python制作九宫格切图器

文章目录

  • 代码
  • 效果

代码

import tkinter as tk
from PIL import Image,ImageTk 
import sys
import tkinter.filedialog#先将图片填充为正方形
def fill_image(image): width, height = image.size #比较图片的宽和高,选取值较大的作为新图的宽 newImage_width = width if width > height else height #生成正方形图,空白处用白色填充newImage = Image.new(image.mode, (newImage_width, newImage_width), color='white')  #如果原图宽大于高,则填充图片的竖直维度if width > height: newImage.paste(image, (0, int((newImage_width - height) / 2))) else: newImage.paste(image, (int((newImage_width - width) / 2),0)) return newImage 
# 切图(切成9张图)
def cut_image(image):width, height = image.sizecolWidth = int(width / 3)   #一行3张image_grid = []for i in range(0,3):for j in range(0,3):row = (j*colWidth,i*colWidth,(j+1)*colWidth,(i+1)*colWidth)image_grid.append(row)image_list = [image.crop(row) for row in image_grid]return image_list#保存图片
def save_images(image_list): index = 1for image in image_list: image.save(str(index) + '.png', 'PNG') index+=1
# 单击选择图片按钮,选择并显示图片
def select_button():global aa=tk.filedialog.askopenfilename()#显示图片img = Image.open(a)out = img.resize((310,280))   #设置图片的大小#out.save("new.png") #保存图片render = ImageTk.PhotoImage(out)img = tkinter.Label(image=render)img.image = renderimg.place(x=30, y=60)txt.set(a)  #显示图片文件路径# 单击切分图片按钮,实现图片分割
def cut_button():file_path=a # 获取图片路径image = Image.open(file_path) image_new = fill_image(image) image_list = cut_image(image_new)save_images(image_list) label1.config(text='切图成功!请在程序所在目录查看!')
# 设置窗口
main=tk.Tk()
#设置窗口的大小
main.geometry('400x400')
main.title('明日九宫格切图器')       #设置标题栏
main.iconbitmap('mr.ico')   #窗口图标
label1=tk.Label(main,text='显示要切分图片的文件路径:',fg='blue')
label1.pack()
txt = tkinter.StringVar()
txt_entry = tkinter.Entry(main, width=55, textvariable=txt)
txt_entry.pack()
button1=tk.Button(main,width=10, height=1,text='选择图片',fg='red',bg='yellow',command=select_button).place(x=30, y=360)
button2=tk.Button(main,width=10, height=1,text='切分图片',fg='red',bg='green',command=cut_button).place(x=120, y=360)
main.mainloop() # 执行主循环

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/701407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仿12306校招项目-项目业务和架构

目录 业务图 用户管理 业务难点 1. 如何确定用户注册信息的真实性 2. 面对亿级用户量 3. 支持多种登录方式会造成读请求扩散,需要解决用户定位问题 4. 高并发场景下缓存穿透问题需要有效解决,避免数据库压力过大 5. 明文存储用户敏感信息会造成安…

抽象的java

Consider defining a bean of type org.springframework.mail.MailSender in your configuration. 报错原因: 第一个:未安装对应的依赖 第二个:对应配置问题 背景:用springboot-java完成邮箱发送 第一个问题解决方法&#xff1…

实战一个 Jenkins 构建 CI/CD流水线 的简单配置过程哈

引言:上一期我们讲述了gitlabCI/CD工具的介绍,工具之争,本期我们介绍Jenkins CI/CD 目录 一、Jenkins介绍 1、Jenkins概念 2、Jenkins目的 3、特性 4、产品发布流程 二、安装Jenkins 1、安装JDK 2、安装Jenkins 1、上传压缩包 2、…

Spark之【数据倾斜】

Spark程序运行变慢,十有八九出现了数据倾斜。那么什么是数据倾斜、导致数据倾斜的原因以及如何克服它以保持Spark应用程序的最佳性能呢? 什么是数据倾斜? Apache Spark中的数据倾斜指的是,在处理的数据其在不同分区之间分布不均…

基于django的购物商城系统

摘要 本文介绍了基于Django框架开发的购物商城系统。随着电子商务的兴起,购物商城系统成为了许多企业和个人创业者的首选。Django作为一个高效、稳定且易于扩展的Python web框架,为开发者提供了便捷的开发环境和丰富的功能模块,使得开发购物商…

spring security 防止已经完成认证的会话再次访问login页面

版本 spring-security:6.2.1 方案 添加过滤器检查会话认证信息,如果包含非匿名用户的认证信息则调用认证成功处理器 final static String URL_LOGIN "/login"; final AuthenticationSuccessHandler authenticationSuccessHandler new SavedRequestA…

GEE入门篇|遥感专业术语(实践操作3):时间分辨率(Temporal Resolution)

目录 时间分辨率(Temporal Resolution) 1.Landsat 2.Sentinel-2 时间分辨率(Temporal Resolution) 时间分辨率是指特定传感器图像流的重访时间或时间节奏,重访时间是指卫星连续访问地球表面同一位置…

小迪安全30WEB 攻防-通用漏洞SQL 注入CTF二次堆叠DNS 带外

#知识点: 1、数据库堆叠注入 根据数据库类型决定是否支持多条语句执行 2、数据库二次注入 应用功能逻辑涉及上导致的先写入后组合的注入 3、数据库 Dnslog 注入 解决不回显(反向连接),SQL 注入,命令执行,SSRF 等 4、黑盒模式分析以上 二次注入&…

创作纪念日:记录我的成长与收获

机缘 一开始是在我深入学习前端知识的Vue.js框架遇到了一个问题,怎么都解决不了,心烦意乱地来csdn上找解决方法。开心的是真被我找到了,真的很感恩,也意识到在这个平台上分享自己的经验是多么有意义的事情,可能随便的…

BRIA.AI开源最强AI一键抠图模型RMBG,超简上手体验

本文首发: AIWalker 欢迎关注AIWalker,近距离接触底层视觉与基础AI技术 近日,BRIA.AI团队于HuggingFace开源了一个基于ISNet背景移除模型RMBG-1.4,它可以有效对前景与背景进行分离。RMBG-1.4在精心构建的数据集上训练而来,该数据包…

C++指针变量的引用

C中的指针变量引用是指使用引用来访问指针所指向的内存地址中的值。这种技术可以简化对指针所指向的对象的访问,并提高代码的可读性。 要创建指针变量的引用,可以使用以下语法: int* ptr; // 声明一个指针变量 int*& ref ptr; // 创建…

ElasticSearch报错解决

最近在学习ES的一些东西,遇到了一些问题,整理一下,希望可以帮助到也在学习ES的小伙伴 1、问题1 报错场景: 单机启动多ES集群 报错信息: [2024-02-24T22:58:10,567][WARN ][o.e.t.RemoteClusterService] [cluster0no…

django rest framework 学习笔记-实战商城

01项目环境搭建_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 # 创建项目 django-admin startproject MyShop# 创建app E:\desktop\my_drf\MyShop>django-admin startapp goodsE:\desktop\my_drf\MyShop>django-admin startapp orderE:\desktop\my_drf\MyShop>…

代码随想录算法训练营day39 | 62.不同路径、63. 不同路径 II

62.不同路径 dp数组以及下标的含义:dp[i][j]代表到达第i行第j列有多少条不同的路径递推公式:dp[i][j] dp[i][j-1] dp[i-1][j]dp数组初始化:dp[0][:] 1 dp[:][0] 1遍历顺序:从前往后遍历举例推导dp数组: 按照这种…

springboot+vue项目基础开发(16)主页面布局

主页面代码,在view下面创建mainLayout.vue <script setup> import{Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from @element-plus/icons-vue

【洛谷 P8706】[蓝桥杯 2020 省 AB1] 解码 题解(模拟+输入输出)

[蓝桥杯 2020 省 AB1] 解码 题目描述 小明有一串很长的英文字母&#xff0c;可能包含大写和小写。 在这串字母中&#xff0c;有很多连续的是重复的。小明想了一个办法将这串字母表达得更短&#xff1a;将连续的几个相同字母写成字母 出现次数的形式。 例如&#xff0c;连续…

《Docker极简教程》--Docker网络--Docker网络的配置和使用

一、Docker网络配置 1.1 单主机网络配置 创建自定义桥接网络 在Docker中&#xff0c;创建自定义桥接网络是一种常见的网络配置方式&#xff0c;特别适用于单主机环境&#xff0c;可以帮助容器相互通信并与外部网络进行通信。下面我将介绍如何在单主机上创建自定义桥接网络&…

C++ //练习 8.2 测试函数,调用参数为cin。

C Primer&#xff08;第5版&#xff09; 练习 8.2 练习 8.2 测试函数&#xff0c;调用参数为cin。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块见练习8.1 /**************************************************************…

代码随想录|day 23

Day 23 一、回溯 二、代码 216. 组合总和 III - 力扣&#xff08;LeetCode&#xff09; class Solution { private:vector<int>path;vector<vector<int>>result;void backtracing(int sum,int k,int n,int startindex){//中止条件if(path.size()k){if(sum…

three.js第一个3D案例

在正式学习Three.js之前&#xff0c;先做一些必要的准备工作&#xff0c;具体说就是下载threejs官方文件包&#xff0c;threejs官方文件包提供了很多有用的学习资源。 threejs官方文件包所有版本&#xff1a;https://github.com/mrdoob/three.js/releases threejs文件资源目录…