python-尝试将Excel文件保存为图片并加上水印

简介: python-尝试将Excel文件保存为图片并加上水印场景:并不是将 excel 的 chart 生成图片,而是将整个表格内容生成图片。1. 准备工作目前搜索不到已有的方法,只能自己尝试写一个,想法有两个:通过 Python 的图片处理库PIL,将 Excel 内信息逐写到图片上;通过另存为 HTML 文件,利用Phantomjs的截图工具,截取到 HTML 。

python-尝试将Excel文件保存为图片并加上水印

场景:并不是将 excel 的 chart 生成图片,而是将整个表格内容生成图片。

1. 准备工作

目前搜索不到已有的方法,只能自己尝试写一个,想法有两个:

  1. 通过 Python 的图片处理库PIL,将 Excel 内信息逐写到图片上;

  2. 通过另存为 HTML 文件,利用Phantomjs的截图工具,截取到 HTML 。比较曲折的方法,但可能更容易上手。

我选择了后者,虽然每一步都不太熟练,但是先逐个击破吧!

2. Excel to HTML

2.1 尝试直接另存为 HTML 不成功

这一步参考 [How do I save Excel Sheet as HTML in Python?
]https://stackoverflow.com/questions/19631511/how-do-i-save-excel-sheet-as-html-in-python
需要先在 excel 里编辑好一个,再运行如下代码:

from win32com.client import Dispatch

xl = Dispatch('Excel.Application')
xl.Workbooks.Open('C:\Foo\Bar.xlsx')
#xl.Visible = True -- optional
xl.Application.Run("SaveHTML")
xl.Workbooks.Close

使用上面的代码报错,信息如下:

com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '无法运行“SaveHTML”宏。可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用。', 'xlmain11.chm', 0, -2146827284), None)

我因为需要大量生成 Excel,觉得这个方法不太适合我,就跳过了。

2.2 使用 Python 编辑现成的 html 模板,再修改自己需要的信息。

需要用到selenium3chromedriver和对应的 Chrome 版本。https://www.cnblogs.com/technologylife/p/5829944.html
一个简短的截图程序:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless') #无界面
chrome_options.add_argument('--disable-gpu')

br = webdriver.Chrome(chrome_options=chrome_options) #实例化浏览器
br.set_window_size(1024,700) #设置窗口大小

br.get('F:/file.htm')
br.get_screenshot_as_file("F:\\file.png")

br.quit() #退出很重要

3. 修改 HTML 文件

这里需要本地打开一个html文件,修改后再用浏览器打开。

3.1 遇到编码转码问题

我的HTML文件编码是’gb2312’,这是Excel2010导出的默认编码。我用Python打开这个文件一直报错!

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 4: ordinal not in range

前后折腾了10个小时!一直在decode encode!其实根本不是这个问题!问题只是:
千万不要有中文文件名和路径!
都被自己的愚蠢惊到了。只要做到这样,再配合这句:

#打开
data = open("F://ktd.htm","r").read().decode("gb2312","ignore")
#保存
f = open('F:/data.htm','w')
f.write(data.encode("gb2312","ignore"))
f.close()

基本就搞定了。

3.2 使用beautifulsoup修改网页

弃疗,即使有修改网页字符串的方式,我也发现太难找到我需要修改的元素,因为它不支持xpath定位。因此我直接用字符串的replace方式。

4. 控制Google浏览器截图

code:

# -*- coding: utf-8 -*-
"""
Created on Tue Jan 30 21:00:45 2018

@author: xglc
"""
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from PIL import Image

chrome_options = Options()
#chrome_options.add_argument('--headless') #无头
#chrome_options.add_argument('--disable-gpu')

br = webdriver.Chrome(chrome_options=chrome_options)
br.set_window_size(950,830)

def _pic(name):

    br.get('F:/zqht/%s.htm'%name)
    # 截取当前窗口,并指定截图图片的保存位置
    path = 'F:/ktd/new/%s.png'%(name) 
    br.get_screenshot_as_file(path)   
    _sy(path) 

#    br.quit()
def _sy(path):
    lp = Image.open(path)  
    tp = Image.open('F:/work/zq/zqz.gif')  #水印

#    rgba_image = lp.convert('RGBA')
#    rgba_watermark = tp.convert('RGBA')
    img = tp.convert('RGBA') 
    r, g, b, alpha = img.split()  
    alpha = alpha.point(lambda i: i>0 and 240)  
    img.putalpha(alpha)  

    image_x, image_y = lp.size
    watermark_x, watermark_y = tp.size

    # 水印位置  mask是通道值,240+ 是透明效果
    lp.paste(img, (image_x - watermark_x, image_y - watermark_y),mask = alpha)
    print ('保存图片') 
    lp.save('F:/lala.png',"PNG") 

if __name__ == '__main__':
    name = 'bgs'
    _pic(name)
  1. 通过调整浏览器窗口来控制截图大小,效果还不错。目前已知缺陷是,还没协调好被调用时候的内存使用问题,可能直接生成一个alpha通道值为240的图片,更节省资源。

  2. 这么一搞,有时候保存个中文路径或者图片也做不到了。可能跟前面的编解码有关。

目录
相关文章
|
2月前
|
数据可视化 Linux iOS开发
Python脚本转EXE文件实战指南:从原理到操作全解析
本教程详解如何将Python脚本打包为EXE文件,涵盖PyInstaller、auto-py-to-exe和cx_Freeze三种工具,包含实战案例与常见问题解决方案,助你轻松发布独立运行的Python程序。
981 2
|
1月前
|
人工智能 Java Linux
Python高效实现Excel转PDF:无Office依赖的轻量化方案
本文介绍无Office依赖的Python方案,利用Spire.XLS、python-office、Aspose.Cells等库实现Excel与PDF高效互转。支持跨平台部署、批量处理、格式精准控制,适用于服务器环境及自动化办公场景,提升转换效率与系统稳定性。
311 7
|
1月前
|
监控 机器人 编译器
如何将python代码打包成exe文件---PyInstaller打包之神
PyInstaller可将Python程序打包为独立可执行文件,无需用户安装Python环境。它自动分析代码依赖,整合解释器、库及资源,支持一键生成exe,方便分发。使用pip安装后,通过简单命令即可完成打包,适合各类项目部署。
|
1月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
353 0
|
2月前
|
机器学习/深度学习 编解码 Python
Python图片上采样工具 - RealESRGANer
Real-ESRGAN基于深度学习实现图像超分辨率放大,有效改善传统PIL缩放的模糊问题。支持多种模型版本,推荐使用魔搭社区提供的预训练模型,适用于将小图高质量放大至大图,放大倍率越低效果越佳。
253 3
|
2月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
689 0
|
3月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
158 0
|
4月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
988 0
|
4月前
|
数据管理 开发工具 索引
在Python中借助Everything工具实现高效文件搜索的方法
使用上述方法,你就能在Python中利用Everything的强大搜索能力实现快速的文件搜索,这对于需要在大量文件中进行快速查找的场景尤其有用。此外,利用Python脚本可以灵活地将这一功能集成到更复杂的应用程序中,增强了自动化处理和数据管理的能力。
335 0
|
存储 数据处理 索引
Python操作Excel常用方法汇总
Python操作Excel常用方法汇总
509 0