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

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

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

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

Q&A

解決済

1回答

3386閲覧

Python3 画像の一括操作(フォルダからの読み込み、リサイズ、別フォルダへの保存)について

SuzuAya

総合スコア71

Python 3.x

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

0グッド

0クリップ

投稿2019/04/10 05:12

前提・実現したいこと

フォルダ内の大量の画像(900枚)を一括で読み込み、特定サイズにリサイズした上で別の指定フォルダに保存したいです。
以下のことを実行できるコードについて、初心者(Python独学歴約半年)にも分かりやすいものを教えて頂けないでしょうか。

1.aフォルダ内の定量画像を一括で読み込む
2.特定サイズにリサイズする(リサイズ前:縦1176×1024 リサイズ後:縦1176×128)
3.リサイズした画像を別のbフォルダに保存する(できればリサイズ前の画像名に_resizeという名前を追加して保存したい)

試したこと

こちらの質問者様のコードが分かりやすかったのですが、画像を保存する部分について補足解答があり、最終的なコードがどうなるのか分かりませんでした。
https://teratail.com/questions/157004

このコードにこだわりませんが、初心者が見ても分かりやすいコードを教えて頂けると大変助かります。
(ネットには色々な方のすばらしいコードがありましたが、for文やリサンプリングに使うフィルターの指定などなど初心者には難しい表記も多々あり、理解できませんでした)

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

Linux PCで、Anacondaの仮想環境を使ってコードを実行予定です。

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

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

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

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

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

tiitoi

2019/04/10 05:14

画像の拡張子はなんですか?
SuzuAya

2019/04/10 05:18

ご確認ありがとうございます。画像の拡張子は、tifです。
_Victorique__

2019/04/10 06:10

> for文やリサンプリングに使うフィルターの指定などなど初心者には難しい表記も多々あり 1日もあれば理解できる内容だと思います。 この先もずっと同じような質問の仕方で乗り切るおつもりでしょうか?
guest

回答1

0

ベストアンサー

  1. glob() で指定したディレクトリ内の tif ファイルのパスをリストアップする。
  2. PIL.Image.open() で読み込む。
  3. PIL.Image オブジェクトの resize() でリサイズする。
  4. PIL.Image オブジェクトの save() で保存する。

python

1import glob 2import os 3 4from PIL import Image 5 6input_dir = 'input' # 画像があるディレクトリ 7output_dir = 'output' # 出力するディレクトリ 8size = (1176, 128) # リサイズ後のサイズ 9 10os.makedirs(output_dir, exist_ok=True) # 保存するディレクトリ 11 12assert(os.path.exists(input_dir)), "directory '{}' not found".format(input_dir) 13for path in glob.glob(input_dir + "/*.tif"): 14 img = Image.open(path) # 画像を path から読み込む。 15 img = img.resize(size) # 画像を size にリサイズする。 16 17 name, ext = os.path.splitext(os.path.basename(path)) # 拡張子を除いたファイル名 18 save_path = os.path.join(output_dir, '{}_resized.tif'.format(name)) # 保存するパス 19 img.save(save_path) # 画像を save_path に保存する。 20 21 print('{} --> {}'.format(path, save_path))

output

1input\CCITT_1.TIF --> output\CCITT_1_resized.tif 2input\CCITT_2.TIF --> output\CCITT_2_resized.tif

動作確認環境

  • Python 3.6.3 Anaconda
  • Windows 10

投稿2019/04/10 05:29

編集2019/04/10 15:33
tiitoi

総合スコア21956

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

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

SuzuAya

2019/04/10 08:34 編集

ご丁寧にご回答頂き、本当にありがとうございます!コードがとても綺麗で分かりやすいです。早速試してみたのですが、リサイズ後の画像の保存がされていませんでした。。解決策についてもしご存知でしたら教えて頂けると幸いです(自分でも調べてみます)。
TakaiY

2019/04/10 15:10

このコードで動きそうですが、なぜ保存されないのか調べてみましたか? まずは、いろいろなところに`print`を仕込んで、ループが思った通りに回っているかとか、`path`の値や`save_path`の値がどうなっているかなど調べみては?
tiitoi

2019/04/10 15:38 編集

> SuzuAya さん どこに出力されたかわかるように回答のコードを少し修正しました。 Python 3.6.3 Windows 10 で動作確認をしております。 TakaiY さんがアドバイスしてくださっているように、コードが意図通り動かないときは print() を入れまくってデバッグしましょう。 いくつか考えられる要因を記載しておきます。 - input_dir 変数で指定している tif ファイルがあるフォルダのパスが間違っている - tif ファイルの拡張子が .tif でない。 -- .tiff の場合、glob.glob() のところを直してください -- Linux や Mac だと TIF と tif の大文字小文字の違いは区別するかもしれません
SuzuAya

2019/04/11 01:31 編集

>TakaiYさん アドバイスありがとうございます。色々なところに'print'を仕込む。。今まで考えつきませんでした。今後試してみます! >tiitoiさん 無事コードが動き、画像が保存されました!input_dir名に漢字が使われていたのが原因だったようで、全て英字にしたところうまくいきました。 初心者の質問に根気づよく丁寧に向き合ってくださり、本当に感謝です。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問