当前位置: 首页 > news >正文

昆山网页网站制作wordpress发文章套模版

昆山网页网站制作,wordpress发文章套模版,苏州网址制作公司,做博客的seo技巧引言 在日常办公中#xff0c;PPT文件往往因为图片过大而导致文件体积过大#xff0c;不便于传输和存储。为了应对这一问题#xff0c;我们可以使用Python的wxPython图形界面库结合python-pptx和Pillow#xff0c;开发一个简单的PPTX压缩工具。本文将详细介绍如何实现这一…引言 在日常办公中PPT文件往往因为图片过大而导致文件体积过大不便于传输和存储。为了应对这一问题我们可以使用Python的wxPython图形界面库结合python-pptx和Pillow开发一个简单的PPTX压缩工具。本文将详细介绍如何实现这一功能。 C:\pythoncode\new\compresspptx.py 全部代码 import wx import os from pptx import Presentation from PIL import Image import ioclass CompressorFrame(wx.Frame):def __init__(self):super().__init__(parentNone, titlePPTX压缩工具)self.panel wx.Panel(self)self.create_ui()def create_ui(self):vbox wx.BoxSizer(wx.VERTICAL)# 文件选择部分hbox1 wx.BoxSizer(wx.HORIZONTAL)self.file_path wx.TextCtrl(self.panel, size(300, -1))browse_btn wx.Button(self.panel, label选择文件)browse_btn.Bind(wx.EVT_BUTTON, self.on_browse)hbox1.Add(self.file_path, proportion1, flagwx.EXPAND|wx.ALL, border5)hbox1.Add(browse_btn, flagwx.ALL, border5)# 压缩按钮compress_btn wx.Button(self.panel, label开始压缩)compress_btn.Bind(wx.EVT_BUTTON, self.on_compress)# 进度条self.progress wx.Gauge(self.panel, range100, size(400, 25))# 状态文本self.status_text wx.StaticText(self.panel, label)vbox.Add(hbox1, flagwx.EXPAND|wx.ALL, border5)vbox.Add(compress_btn, flagwx.ALIGN_CENTER|wx.ALL, border5)vbox.Add(self.progress, flagwx.EXPAND|wx.ALL, border5)vbox.Add(self.status_text, flagwx.EXPAND|wx.ALL, border5)self.panel.SetSizer(vbox)self.Fit()def on_browse(self, event):with wx.FileDialog(self, 选择PPTX文件, wildcardPowerPoint files (*.pptx)|*.pptx,stylewx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:if fileDialog.ShowModal() wx.ID_CANCEL:returnpath fileDialog.GetPath()path os.path.normpath(path.strip())self.file_path.SetValue(path)def update_status(self, text):wx.CallAfter(self.status_text.SetLabel, text)def on_compress(self, event):if not self.file_path.GetValue():wx.MessageBox(请先选择文件, 提示, wx.OK | wx.ICON_INFORMATION)returninput_path self.file_path.GetValue().strip()input_path os.path.normpath(input_path)if not os.path.exists(input_path):wx.MessageBox(文件不存在请检查路径, 错误, wx.OK | wx.ICON_ERROR)returnoutput_path self._get_output_path(input_path)try:self._compress_pptx(input_path, output_path)wx.MessageBox(压缩完成\n保存路径 output_path, 成功, wx.OK | wx.ICON_INFORMATION)except Exception as e:wx.MessageBox(f压缩过程中出错{str(e)}, 错误, wx.OK | wx.ICON_ERROR)finally:self.progress.SetValue(0)self.update_status()def _get_output_path(self, input_path):directory os.path.dirname(input_path)filename os.path.basename(input_path)name, ext os.path.splitext(filename)return os.path.join(directory, f{name}_compressed{ext})def _compress_pptx(self, input_path, output_path):try:prs Presentation(input_path)except Exception as e:raise Exception(f无法打开PPTX文件: {str(e)})total_slides len(prs.slides)processed_images 0skipped_images 0for i, slide in enumerate(prs.slides):self.update_status(f正在处理第 {i1}/{total_slides} 张幻灯片)shapes_with_images []for shape in slide.shapes:if hasattr(shape, image):shapes_with_images.append(shape)for shape in shapes_with_images:try:# 获取图片数据image_bytes shape.image.blob# 使用PIL压缩图片with Image.open(io.BytesIO(image_bytes)) as img:# 转换RGBA为RGBif img.mode RGBA:img img.convert(RGB)# 压缩图片# 如果图片较大调整尺寸max_size 800 # 最大尺寸为1024像素if img.width max_size or img.height max_size:ratio min(max_size/img.width, max_size/img.height)new_size (int(img.width * ratio), int(img.height * ratio))img img.resize(new_size, Image.LANCZOS)output_buffer io.BytesIO()img.save(output_buffer, formatJPEG, quality10, optimizeTrue)# 替换原图片shape._element.blip.embed.rId shape._element.blip.embed.rIdnew_image output_buffer.getvalue()# 更新图片数据image_part shape.imageimage_part._blob new_imageprocessed_images 1except Exception as e:print(f处理图片时出错: {str(e)})skipped_images 1continue# 更新进度条progress int((i 1) / total_slides * 100)wx.CallAfter(self.progress.SetValue, progress)self.update_status(f完成成功处理 {processed_images} 张图片跳过 {skipped_images} 张图片)try:prs.save(output_path)except Exception as e:raise Exception(f保存文件时出错: {str(e)})def main():app wx.App()frame CompressorFrame()frame.Show()app.MainLoop()if __name__ __main__:main()环境准备 在开始之前我们需要安装以下Python库 wxPython用于创建图形用户界面python-pptx用于处理PPTX文件Pillow用于图片压缩 安装命令 pip install wxPython python-pptx Pillow代码结构 代码主要包括以下几个部分 图形界面设计文件选择与压缩功能图片压缩逻辑 代码实现 导入必要模块 import wx import os from pptx import Presentation from PIL import Image import io创建主窗口 主窗口CompressorFrame继承自wx.Frame用于展示UI组件。 class CompressorFrame(wx.Frame):def __init__(self):super().__init__(parentNone, titlePPTX压缩工具)self.panel wx.Panel(self)self.create_ui()def create_ui(self):vbox wx.BoxSizer(wx.VERTICAL)# 文件选择部分hbox1 wx.BoxSizer(wx.HORIZONTAL)self.file_path wx.TextCtrl(self.panel, size(300, -1))browse_btn wx.Button(self.panel, label选择文件)browse_btn.Bind(wx.EVT_BUTTON, self.on_browse)hbox1.Add(self.file_path, proportion1, flagwx.EXPAND|wx.ALL, border5)hbox1.Add(browse_btn, flagwx.ALL, border5)# 压缩按钮compress_btn wx.Button(self.panel, label开始压缩)compress_btn.Bind(wx.EVT_BUTTON, self.on_compress)# 进度条self.progress wx.Gauge(self.panel, range100, size(400, 25))# 状态文本self.status_text wx.StaticText(self.panel, label)vbox.Add(hbox1, flagwx.EXPAND|wx.ALL, border5)vbox.Add(compress_btn, flagwx.ALIGN_CENTER|wx.ALL, border5)vbox.Add(self.progress, flagwx.EXPAND|wx.ALL, border5)vbox.Add(self.status_text, flagwx.EXPAND|wx.ALL, border5)self.panel.SetSizer(vbox)self.Fit()文件选择功能 通过文件对话框让用户选择PPTX文件。 def on_browse(self, event):with wx.FileDialog(self, 选择PPTX文件, wildcardPowerPoint files (*.pptx)|*.pptx,stylewx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as fileDialog:if fileDialog.ShowModal() wx.ID_CANCEL:returnpath fileDialog.GetPath()self.file_path.SetValue(os.path.normpath(path.strip()))压缩功能实现 压缩图片逻辑 使用Pillow库压缩PPT中的图片将其转换为JPEG格式并降低质量以减少文件大小。限制图片的最大尺寸保持图片的可视质量。 更新进度条与状态 使用wx.Gauge展示处理进度。实时更新处理状态。 def _compress_pptx(self, input_path, output_path):prs Presentation(input_path)total_slides len(prs.slides)processed_images 0skipped_images 0for i, slide in enumerate(prs.slides):self.update_status(f正在处理第 {i1}/{total_slides} 张幻灯片)shapes_with_images [shape for shape in slide.shapes if hasattr(shape, image)]for shape in shapes_with_images:try:image_bytes shape.image.blobwith Image.open(io.BytesIO(image_bytes)) as img:if img.mode RGBA:img img.convert(RGB)max_size 800if img.width max_size or img.height max_size:ratio min(max_size/img.width, max_size/img.height)new_size (int(img.width * ratio), int(img.height * ratio))img img.resize(new_size, Image.LANCZOS)output_buffer io.BytesIO()img.save(output_buffer, formatJPEG, quality10, optimizeTrue)new_image output_buffer.getvalue()shape.image._blob new_imageprocessed_images 1except Exception as e:print(f处理图片时出错: {str(e)})skipped_images 1wx.CallAfter(self.progress.SetValue, int((i 1) / total_slides * 100))self.update_status(f完成成功处理 {processed_images} 张图片跳过 {skipped_images} 张图片)prs.save(output_path)主函数 启动wxPython应用程序。 def main():app wx.App()frame CompressorFrame()frame.Show()app.MainLoop()if __name__ __main__:main()运行结果
http://www.w-s-a.com/news/836713/

相关文章:

  • 建设微网站项目报告网站优化难吗
  • 做网站需要自己上传产品吗企业网站系统设计
  • wordpress个人中心济南网站建设和优化
  • 网站pc端网址和手机端网址建设牡丹江 网站建设
  • 苏州新区城乡建设网站人才招聘网站开发
  • 一般网站是怎么做的威远移动网站建设
  • 赣州网站开发公司怎么才能设计好一个网站
  • 个人网站建设分几个步走培训网站开发哪个好
  • 智能网站价格河北城乡建设网站
  • 做动画在线观看网站网上花店 网站源代码
  • 做网站项目体会商业信息
  • 深圳的设计网站谷歌浏览器下载手机版官网
  • 苏州网站建设都找全网天下外贸响应式网站设计
  • 揭阳专业做网站网站迁移教材
  • 手机上怎么上传网站吗工程信息网站建设
  • 用手机建网站微信手机网站流程
  • 专注软件优化分享的网站梧州网页设计
  • 长春火车站和高铁站是一个站吗公司名称注册查询系统
  • 便利的集团网站建设网页的依托网站
  • 茶叶网站建设题库制作助手app
  • 网站建设栏目层级北京网站搭建公司电话
  • 网站开发运营经理打开百度竞价页面是网站是什么
  • 国内最专业的设计网站建设现在用什么语言做网站
  • 湖南网站开发 岚鸿象山县建设工程招投标网站
  • 长沙免费网站排名wordpress 教学
  • 专门做app的网站html代码是什么
  • 临沂网站制作建设欧米茄表官网
  • 北京模板网站开发全包网站建设的第三方平台
  • 在凡科做的网站怎么推广网页模板下载 免费 html
  • 有关网站建设的标题仿亿欧网wordpress