質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

308閲覧

リストに含まれている画像名が、指定したフォルダ内にあった場合、その画像をリサイズする方法

green2021

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/06/01 11:08

実現したいこと

リストに含まれている画像名が、指定したフォルダ内にあった場合、その画像をリサイズする方法を教えてください。
あるフォルダには、100件以上の画像があります。
その中から、別のテキストファイルにリサイズしたい画像名を記載しています。

つまり、指定した画像を一括でリサイズを行いたいです。

※あとで、指定した画像のみを他の画像と合成したりと、色々と複雑なためフォルダ内の画像を全てリサイズは避けたいです。

よろしくお願いいたします。

Traceback (most recent call last): File "c:\Users\K21060066\Desktop\Python学習ファイル\画像合成\shitumon.py", line 11, in <module> zenmen_pic = Image.open("\EPStoJPEG\%s" ,re) File "C:\Users\K21060066\AppData\Local\Programs\Python\Python39\lib\site-packages\PIL\Image.py", line 2933, in open raise ValueError(f"bad mode {repr(mode)}") ValueError: bad mode '2004888-30.jpg'

該当のソースコード

Python

1# coding: shift-jis 2from PIL import Image 3 4 5# 画像のリスト('zenmen.txt)を配列に入れる。 6with open('zenmen.txt', 'r') as f: 7 zenmen_list = f.read().split("\n") 8 9# フォルダ名 EPStoJPEG内の画像のうち、リスト内に記載されている画像を一括で変換する。 10for re in zenmen_list: 11 zenmen_pic = Image.open("\EPStoJPEG\%s" ,re) 12 zenmen_resize = zenmen_pic.resize((690, 398))

補足情報(FW/ツールのバージョンなど)

一応、「zenmen.txt」の中身を記載いたします。
フォルダ「EPStoJPEG」には、「zenmen.txt」で記載されている画像名を含んだ画像が含まれています。
#zenmen.txt
2004888-30.jpg
1000024-78.jpg
2038020-04.jpg
1007559-52.jpg
1000125-99.jpg
2011955-01.jpg
2046492-17.jpg
2113803-08.jpg
2113804-05.jpg
2082008-08.jpg
2196987-03.jpg
2243336-01.jpg
2228157-08.jpg
2132281-03.jpg
2193297-05.jpg
2095115-04.jpg

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Image.open("\EPStoJPEG\%s" ,re)だとファイルパスが意図通りに指定できておらず、なおかつopenの第2引数のファイルオープンモードにファイル名が入ってしまっています。
以下のようにパス文字列を作成して、さらにosモジュールで存在確認したうえで処理するとよいでしょう。

Python

1import os 2 3# 略 4 5for re in zenmen_list: 6 path = f'/EPStoJPEG/{re}' 7 if os.path.exists(path): 8 zenmen_pic = Image.open(path) 9 zenmen_resize = zenmen_pic.resize((690, 398))

投稿2022/06/01 11:32

can110

総合スコア38230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

そのコードで望みの処理ができるかどうかはわかりませんが、エラーの原因はここです。

python

1zenmen_pic = Image.open("\EPStoJPEG\%s" ,re)

open()に 「"\EPStoJPEG%s"」と 「re」の2つの引数を渡していることになっています。openの2つめの引数はモードですがreにはファイル名が入っているので そんなモードは知りませんというえらーです。

新しめの書き方にすると、

python

1zenmen_pic = Image.open(f'EPStoJPEG/{re}")

こんな感じでしょうか。 ただし、「EPStoJPEG」ディレクトリ(フォルダ)が実行ディレクトリにあると勝手に解釈してますが、ほか の場所にあるならそこを指定する必要があります。

投稿2022/06/01 11:35

編集2022/06/01 13:16
TakaiY

総合スコア12651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問