ホームページ >バックエンド開発 >Python チュートリアル >Python で画像を水平方向に連結する方法: クイックガイド

Python で画像を水平方向に連結する方法: クイックガイド

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 09:41:02322ブラウズ

How to Concatenate Images Horizontally in Python: A Quick Guide

Python を使用して画像を水平方向に連結する

この記事は、Python を使用して複数の JPEG 画像を水平方向に結合するという課題に取り組むことを目的としています。

問題ステートメント

それぞれの寸法が 148 x 95 の 3 つの画像を水平方向に結合して 1 つの画像を形成する必要があるシナリオを考えてみましょう。次のコードを使用した以前の試みで問題が発生しました:

<code class="python">import sys
from PIL import Image

list_im = ['Test1.jpg','Test2.jpg','Test3.jpg']

new_im = Image.new('RGB', (444,95))

for elem in list_im:
    for i in xrange(0,444,95):
        im=Image.open(elem)
        new_im.paste(im, (i,0))
new_im.save('test.jpg')</code>

提案された解決策

問題に対処するために、改善されたコードが以下に提供されています:

<code class="python">import sys
from PIL import Image

images = [Image.open(x) for x in ['Test1.jpg', 'Test2.jpg', 'Test3.jpg']]
widths, heights = zip(*(i.size for i in images))

total_width = sum(widths)
max_height = max(heights)

new_im = Image.new('RGB', (total_width, max_height))

x_offset = 0
for im in images:
  new_im.paste(im, (x_offset,0))
  x_offset += im.size[0]

new_im.save('test.jpg')</code>

この解決策には次の重要な修正が含まれています:

  • 結合された画像の全体的な幅と高さを決定するための zip(*(i.size for i in Images)) の使用
  • 問題のあるネストされたループを、リスト内の各画像を反復処理する単純化されたループに置き換えます
  • 偶発的な重なりを避けるために、各画像の幅に基づいて貼り付け位置を調整します。

画像の寸法のハードコーディングを回避し、単一行で寸法を指定するための規定 (両方とも追加情報に記載) は、改良されたコードに固有のものです。

説明

更新されたコードは、最初にすべての入力画像の幅と高さを計算し、これらの値を使用して出力画像の合計幅と最大高さを決定します。

次に、計算された寸法で空の画像を作成します。

次に、各入力画像を反復処理し、空の画像の適切な X オフセット (0 から開始) にそれぞれを貼り付け、貼り付けるたびに X オフセットをインクリメントして次の画像に道を譲ります。

最後に、結合された画像が指定したファイル名で保存されます。

以上がPython で画像を水平方向に連結する方法: クイックガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。