web-dev-qa-db-ja.com

Python:PyQtでラスターイメージのサイズを変更する方法

入力ラスターイメージ(jpgなど)を指定した幅/高さの解像度(ピクセル単位)に変更する方法を見つける必要があります。新しい画像のサイズを変更するときにPyQtが元の画像の縦横比を維持するのは素晴らしいことです(そのため、ストレッチは行われず、スケーリングのみが行われます)。

src = '/Users/usrName/Images/originalImage.jpg'(2048x1024)(長方形の画像2:1の比率)dest = '/Users/usrName/Images/originalImage_thumb.jpg'(64x64)(出力画像は正方形1:1です)比)。

前もって感謝します!

配置された結果のFUNC:

...画像のサイズを変更したり、QTがこれまでにサポートしている任意の形式に画像を変換したりできます... 'bmp'、 'gif'、 'jpg'、 'jpeg'、 'png'、 'pbm'、 「tiff」、「svg」、「xbm」

def resizeImageWithQT(src, dest):
    pixmap = QtGui.QPixmap(src)
    pixmap_resized = pixmap.scaled(720, 405, QtCore.Qt.KeepAspectRatio)
    if not os.path.exists(os.path.dirname(dest)): os.makedirs(os.path.dirname(dest))
    pixmap_resized.save(dest)
13
alphanumeric

ピクスマップを作成します。

    pixmap = QtGui.QPixmap(path)

次に QPixmap.scaledToWidth または QPixmap.scaledToHeight を使用します:

    pixmap2 = pixmap.scaledToWidth(64)
    pixmap3 = pixmap.scaledToHeight(64)

2048x1024の画像の場合、最初の方法では64x32の画像が得られ、2番目の方法では128x64の画像になります。同じアスペクト比を維持しながら2048x1024の画像を64x64にサイズ変更することは明らかに不可能です(比率が異なるため)。

幅と高さのどちらかを選択しないようにするには、 QPixmap.scaled を使用できます。

    pixmap4 = pixmap.scaled(64, 64, QtCore.Qt.KeepAspectRatio)

可能な最大サイズに自動的に調整されます。

画像を正確なサイズに変更するには、次の操作を行います。

    pixmap5 = pixmap.scaled(64, 64)

もちろん、この場合、元の画像も1:1でなければ、結果の画像は同じアスペクト比を維持しません。

30
ekhumoro