日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python将excel转换成图片_python-尝试将Excel文件保存为图片并加上水印

發(fā)布時(shí)間:2025/3/15 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python将excel转换成图片_python-尝试将Excel文件保存为图片并加上水印 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python-嘗試將Excel文件保存為圖片并加上水印

場景:并不是將 excel 的 chart 生成圖片,而是將整個(gè)表格內(nèi)容生成圖片。

1. 準(zhǔn)備工作

目前搜索不到已有的方法,只能自己嘗試寫一個(gè),想法有兩個(gè):

通過 Python 的圖片處理庫PIL,將 Excel 內(nèi)信息逐寫到圖片上;

通過另存為 HTML 文件,利用Phantomjs的截圖工具,截取到 HTML 。比較曲折的方法,但可能更容易上手。

我選擇了后者,雖然每一步都不太熟練,但是先逐個(gè)擊破吧!

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

使用上面的代碼報(bào)錯(cuò),信息如下:

com_error: (-2147352567, '發(fā)生意外。', (0, 'Microsoft Excel', '無法運(yùn)行“SaveHTML”宏。可能是因?yàn)樵摵暝诖斯ぷ鞑局胁豢捎?#xff0c;或者所有的宏都被禁用。', 'xlmain11.chm', 0, -2146827284), None)

我因?yàn)樾枰罅可?Excel,覺得這個(gè)方法不太適合我,就跳過了。

2.2 使用 Python 編輯現(xiàn)成的 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) #實(shí)例化瀏覽器

br.set_window_size(1024,700) #設(shè)置窗口大小

br.get('F:/file.htm')

br.get_screenshot_as_file("F:\\file.png")

br.quit() #退出很重要

3. 修改 HTML 文件

這里需要本地打開一個(gè)html文件,修改后再用瀏覽器打開。

3.1 遇到編碼轉(zhuǎn)碼問題

我的HTML文件編碼是’gb2312’,這是Excel2010導(dǎo)出的默認(rèn)編碼。我用Python打開這個(gè)文件一直報(bào)錯(cuò)!

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

前后折騰了10個(gè)小時(shí)!一直在decode encode!其實(shí)根本不是這個(gè)問題!問題只是:

千萬不要有中文文件名和路徑!

都被自己的愚蠢驚到了。只要做到這樣,再配合這句:

#打開

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修改網(wǎng)頁

棄療,即使有修改網(wǎng)頁字符串的方式,我也發(fā)現(xiàn)太難找到我需要修改的元素,因?yàn)樗恢С謝path定位。因此我直接用字符串的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)

# 截取當(dāng)前窗口,并指定截圖圖片的保存位置

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)

通過調(diào)整瀏覽器窗口來控制截圖大小,效果還不錯(cuò)。目前已知缺陷是,還沒協(xié)調(diào)好被調(diào)用時(shí)候的內(nèi)存使用問題,可能直接生成一個(gè)alpha通道值為240的圖片,更節(jié)省資源。

這么一搞,有時(shí)候保存?zhèn)€中文路徑或者圖片也做不到了。可能跟前面的編解碼有關(guān)。

?

總結(jié)

以上是生活随笔為你收集整理的python将excel转换成图片_python-尝试将Excel文件保存为图片并加上水印的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。