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

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

1. 准备工作

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

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

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

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

2. Excel to HTML

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

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 模板,再修改自己需要的信息。

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)

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

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

python将excel转换成图片_python-尝试将Excel文件保存为图片并加上水印-阿里云开发者社区...相关推荐

  1. python听歌识曲爬虫_Python爬取网易云音乐热门评论的搜索结果-阿里云开发者社区...

    网易云音乐评论爬虫(三):爬取歌曲的全部评论 用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的 ...

  2. python django web典型模块开发实战_带你读《Python Django Web典型模块 开发实战》之一:从新浪微博聊起多端应用-阿里云开发者社区...

    Python Django Web典型模块 开发实战 点击查看第二章 点击查看第三章 寇雪松 编著 第1章 从新浪微博聊起多端应用 当人们听到"新浪",脑海里第一个浮现的关联词是& ...

  3. python列表索引超出范围 等于啥_python如何解决IndexError:列表索引超出范围?-问答-阿里云开发者社区-阿里云...

    我正在尝试为ucf101数据集生成密集流,但我不断收到以下错误: 我尝试在第68行中将video_name.split('')[1]更改为video_name.split('')[0],已编译代码,但 ...

  4. python email模块详解_python模块之email: 电子邮件编码解码 (一、解码邮件)-阿里云开发者社区...

    python自带的email模块是个很有意思的东西,它可以对邮件编码解码,用来处理邮件非常好用. 处理邮件是一个很细致的工作,尤其是解码邮件,因为它的格式变化太多了,下面先看看一个邮件的源文件: Re ...

  5. python全局变量有缩进吗_Python全局变量和局部变量的问题 400 请求报错 -问答-阿里云开发者社区-阿里云...

    # coding:utf-8 sum = 5 def add(x, y): print sum sum = x + y if __name__ == '__main__': add(7, 8) 上面的 ...

  6. python将列表转换成集合_python集合变成列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 可以存储任意数据类型的集合列表里:可以存储不同的数据类型 s= print s, ...

  7. python string模块安装_python String模块-阿里云开发者社区

    string成员常量: ascii_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPQRSTUVWXYZ' ascii_lowercase  ...

  8. python中str用法_python中的str()不能直接用吗 -问答-阿里云开发者社区-阿里云

    str函数是Python的内置函数,它将参数转换成字符串类型,即人适合阅读的形式. 其语法格式为 1 str(object) 返回值: 返回object的字符串形式 使用示例 无参调用 当str()函 ...

  9. python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区

    2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...

最新文章

  1. 优达学城《DeepLearning》2-4:自编码器(无监督学习算法)
  2. 【Qt】Qt信号与槽使用不当,使程序崩溃
  3. 真 · 圆桌!WAIC论坛上演自动驾驶专家激辩,直面技术路径之争
  4. git 统计单个开发的代码量
  5. HTML 4.01 规定了三种文档类型
  6. Linux下开发常用的CVS使用手册
  7. 03-neo4j的命令
  8. 解决Tensorflow2.0出现:AttributeError: module 'tensorflow' has no attribute 'get_default_graph'的问题
  9. 创建数据库和表的SQL语句
  10. python敲七游戏代码_敲七游戏数字表
  11. Linux svn up 遇到Conflict discovered in
  12. 智能人体感应灯,微波雷达存在感应,智能照明技术方案
  13. 选择服务器系统,服务器系统选择
  14. Java用jxl对表格的数值进行比对
  15. 2021年服创国赛参赛小结
  16. html如何自己做一个背景特效,背景效果实现方法总结
  17. 高祖酒老总梁辉收《江行初雪图》临作,获保值增值承诺
  18. 安卓的WebView的使用
  19. 安卓手机端运行的adb工具_苹果、安卓手机端 移动营销、办公+华为云
  20. PaddleOCR win10部署 C++

热门文章

  1. 2021 上海科技大学 信息学院SIST 推免夏令营 经历
  2. 一文概括常用图像处理算法
  3. 初学larval 第二篇(大神绕道哦,针对新手友好的一篇)
  4. Python智能机械助理
  5. Windows bat脚本获取administrator权限
  6. C#实战011:Excel操作-获取Excel某一列数据并存入数组
  7. 16.opengl-qt 基础光照
  8. oracle 此处不允许序号
  9. VC 关于CEdit基本用法
  10. dedecms教程:单页制作教程