同じpython関数を完了して同じフォルダーに保存する方法は?
-
22-07-2019 - |
質問
実際に何かをする最初の実際のpython関数を作成しようとしています。私が達成したいのは、指定されたフォルダを検索し、すべての画像を開いてそれらをマージして、フィルムストリップ画像を作成することです。 1つの画像で5つの画像が互いに重なり合っていることを想像してください。
私はこのコードを持っているので、大丈夫ですが、適切な修正が必要です:
import os
import Image
def filmstripOfImages():
imgpath = '/path/here/'
files = glob.glob(imgpath + '*.jpg')
imgwidth = files[0].size[0]
imgheight = files[0].size[1]
totalheight = imgheight * len(files)
filename = 'filmstrip.jpg'
filmstrip_url = imgpath + filename
# Create the new image. The background doesn't have to be white
white = (255,255,255)
filmtripimage = Image.new('RGB',(imgwidth, totalheight),white)
row = 0
for file in files:
img = Image.open(file)
left = 0
right = left + imgwidth
upper = row*imgheight
lower = upper + imgheight
box = (left,upper,right,lower)
row += 1
filmstripimage.paste(img, box)
try:
filmstripimage.save(filename, 'jpg', quality=90, optimize=1)
except:
filmstripimage.save(miniature_filename, 'jpg', quality=90)")
画像をロードしたディレクトリと同じディレクトリに新しいfilmstrip.jpgを保存するようにこれを変更するにはどうすればよいですか?そして、おそらく何か足りないものや間違っているものがあります。誰か手がかりがありますか?
解決
これはあなたの質問に対する答えではありませんが、役に立つかもしれません:
#!/usr/bin/env python
import Image
def makefilmstrip(images, mode='RGB', color='white'):
"""Return a combined (filmstripped, each on top of the other) image of the images.
"""
width = max(img.size[0] for img in images)
height = sum(img.size[1] for img in images)
image = Image.new(mode, (width, height), color)
left, upper = 0, 0
for img in images:
image.paste(img, (left, upper))
upper += img.size[1]
return image
if __name__=='__main__':
# Here's how it could be used:
from glob import glob
from optparse import OptionParser
# process command-line args
parser = OptionParser()
parser.add_option("-o", "--output", dest="file",
help="write combined image to OUTPUT")
options, filepatterns = parser.parse_args()
outfilename = options.file
filenames = []
for files in map(glob, filepatterns):
if files:
filenames += files
# construct image
images = map(Image.open, filenames)
img = makefilmstrip(images)
img.save(outfilename)
例:
$ python filmstrip.py -o output.jpg *.jpg
他のヒント
try
セクションを次のように変更すると思います:
filmstripimage.save(filmstrip_url, 'jpg', quality=90, optimize=1)
冗談を言っていない場合、スクリプトにいくつかの問題があります。 glob.glob()
は、ファイル名のリスト(イメージオブジェクトではなく文字列オブジェクト)を返すため、 files [0] .size [0]
は機能しません。
J。F. Sebastianが述べたように、globは画像オブジェクトを返しません...:
今のところ、スクリプトはフォルダー内の画像がすべて同じサイズと形状であると想定しています。多くの場合、これは安全な仮定ではありません。
そのため、これらの両方の理由から、サイズを決定する前に画像を開く必要があります。開いたら、幅を設定し、空のスペースがないように画像をその幅に拡大縮小する必要があります。
また、スクリプトのどこにもminiature_filenameを設定していません。
所属していません StackOverflow