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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

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

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文件保存为图片并加上水印的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。