Python のどのイメージング モジュールを使用すると、特定のサイズのスクリーンショット (画面全体ではなく) を撮影できますか? PIL を試してみましたが、ImageGrab.grab() で小さな四角形を選択するようには見えず、PyGame を試しましたが、メイン ディスプレイ パネルの外でスクリーン ショットを撮ることができません。
5 に答える
You can use pyscreenshot module.
The pyscreenshot
module can be used to copy the contents of the screen to a PIL
image memory or file.
You can install it using pip
.
$ sudo pip install pyscreenshot
Usage:
import pyscreenshot as ImageGrab
# fullscreen
im=ImageGrab.grab()
im.show()
# part of the screen
im=ImageGrab.grab(bbox=(10,10,500,500))
im.show()
# to file
ImageGrab.grab_to_file('im.png')
PIL を試してみましたが、ImageGrab.grab() に小さな四角形を選択させることができないようです
何を試しましたか?
のドキュメントにImageGrab
明確に記載されているように、関数にはbbox
パラメーターがあり、次のとおりです。
境界ボックス内のピクセルは「RGB」画像として返されます。境界ボックスを省略すると、画面全体がコピーされます。
したがって、 を渡さないと、画面全体しか取得できませんbbox
。
私はPillowのドキュメントにリンクしていますが(Pillowを使用する必要があります)、古い学校のPILのドキュメントは同じことを言っていることに注意してください:
境界ボックス引数を使用して、画面の一部のみをコピーできます。
したがって、本当に古いバージョンの PIL (1.1.3 より前で、10 年以上古いと思われます) を使用していない限り、この機能があります。
1) pyscreenshot を使用します。ImageGrab は動作しますが、Windows でのみ動作します。
2) 画像を取得してボックス化し、その画像を保存します
3) ImageGrab.grab_to_file を使用しないでください。フル サイズの画像が保存されます。
4) スクリーンショットを保存するだけの場合は、im.show で画像を表示する必要はありません。
import pyscreenshot as ImageGrab
im=ImageGrab.grab(bbox=(10,10,500,500))
im.save('im.png')
Linux または Windows プラットフォームで pyscreenshot を使用できます。私はUbuntuを使用しています。サブプロセスが適用されている場合は、mss と一緒に false に設定して強制することができ、最高のパフォーマンスが得られます。
import pyscreenshot as ImageGrab
import time
t1 = time.time()
imgScreen = ImageGrab.grab(backend="mss", childprocess=False)
img = imgScreen.resize((640,480))
img.save("screen.png")
t2 = time.time()
print("The passing time",(t2-t1))