1、發(fā)現問題
背景是我們開發(fā)了一個app(h5開發(fā))牲剃,只能內網訪問,而且禁了手機截屏⌒劭桑現在需要截圖發(fā)給美工凿傅,讓她提一些修改意見缠犀。
于是通過內網電腦打開頁面,用chrome開啟app預覽模式狭归。
image.png
使用qq截圖夭坪,可以截,但是很難準確的切到頁面的邊上过椎,如下圖室梅。
image.png
2、解決問題
于是考慮自己動手搞一個截圖疚宇,截固定區(qū)域即可亡鼠。
引入pil庫,分分鐘就搞定了截圖
import time
from PIL import ImageGrab, Image
folderpath="D:/小姐姐截圖/"
# 區(qū)域截圖left, upper, right, lower
def screenRegion():
try:
left, top = 66, 54
width, height = 375, 667 # iphone6
bbox = (left, top, left + width, top + height)
img = ImageGrab.grab(bbox)
newfilename = "{}{}.jpg".format(folderpath,int(time.time() * 1000))
img.save(newfilename)
print("screen saved!")
except Exception as e:
print("error:",e)
這樣我只需要把pycharm放在旁邊敷待,執(zhí)行一下间涵,就可以截圖了。
image.png
3榜揖、優(yōu)化解決方案
然而這樣還是需要在chrome和pycharm之間切來切去勾哩,非常不舒適。
那么就搞一個鍵盤監(jiān)聽举哟,按鍵一下截一張思劳。
import time
from PIL import ImageGrab, Image
from pynput import keyboard, mouse
folderpath="D:/小姐姐截圖/"
#按鍵松開的時候執(zhí)行,這里用的是PrintScreen這個鍵妨猩,你也可以用其他的
def on_release(key):
if key == keyboard.Key.print_screen:
screenRegion()
# 區(qū)域截圖left, upper, right, lower
def screenRegion():
try:
left, top = 66, 54
width, height = 375, 667 # iphone6
bbox = (left, top, left + width, top + height)
img = ImageGrab.grab(bbox)
newfilename = "{}{}.jpg".format(folderpath,int(time.time() * 1000))
img.save(newfilename)
print("screen saved!")
except Exception as e:
print("error:",e)
if __name__ == '__main__':
listener = keyboard.Listener(on_release=on_release)
listener.start()
listener.join()
這樣按一下PrintScreen潜叛,就會截圖并且自動生成文件,大功告成壶硅。
4威兜、成果
隨手截上幾張,啪啪啪庐椒,emmm椒舵,每次都精確的切到固定的點位,極度舒適约谈。
image.png
5笔宿、復制到剪切板——用了幾天后回來補充這一章
細心的小伙伴可能發(fā)現了,保存文件雖然可以了窗宇,但是當我按下PrintScreen的時候,復制到剪切板的仍然是全屏特纤,這樣以來我如果想直接ctrl+v到qq或者微信發(fā)給別人就不是很方便了军俊,還要找到那個文件再發(fā)。
于是我又加了把那個區(qū)域截圖放到剪切板的代碼捧存。
# 往剪貼板中放入圖片
def setClipboard(data):
win32clipboard.OpenClipboard() # 打開剪貼板
win32clipboard.EmptyClipboard() # 先清空剪貼板
win32clipboard.SetClipboardData(win32con.CF_DIB, data) # 將圖片放入剪貼板
win32clipboard.CloseClipboard()
代碼的最終形態(tài)如下:
import time,io
from PIL import ImageGrab, Image
import win32clipboard,win32con
from pynput import keyboard, mouse
folderpath="D:/小姐姐截圖/"
def on_release(key):
if key == keyboard.Key.print_screen:
screenRegion()
# 區(qū)域截圖left, upper, right, lower
def screenRegion():
try:
left, top = 34, 54
width, height = 375, 667 # iphone6
bbox = (left, top, left + width, top + height)
img = ImageGrab.grab(bbox)
newfilename = "{}{}.jpg".format(folderpath,int(time.time() * 1000))
img.save(newfilename)
# 將圖片轉換為字節(jié)流
output = io.BytesIO()
img.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
setClipboard(data)
print("screen saved!")
except Exception as e:
print("error:",e)
# 往剪貼板中放入圖片
def setClipboard(data):
win32clipboard.OpenClipboard() # 打開剪貼板
win32clipboard.EmptyClipboard() # 先清空剪貼板
win32clipboard.SetClipboardData(win32con.CF_DIB, data) # 將圖片放入剪貼板
win32clipboard.CloseClipboard()
if __name__ == '__main__':
listener = keyboard.Listener(on_release=on_release)
listener.start()
listener.join()
老胡的公眾號粪躬,關注一波吧