web-dev-qa-db-ja.com

ディレクトリ内の複数の画像のサイズを一度に160x160に変更できますか?

ディレクトリ内の複数のサブフォルダーに保存されている複数の画像のサイズを変更したい。元の画像を削除して、これらの画像をサイズ変更した画像に置き換えたい

なぜ?

別のパーティションに多くのコンテンツのアイコンをフォルダーに入れました。これらの画像の一部は1メガバイトで500x500であり、1080pディスプレイ上のフォルダーアイコンが多すぎると思います。また、ノーチラスのパフォーマンスを低下させ、貴重なスペースを占有していると思います

フォルダ構造はどうですか?

├── [4.0K]  Zombieland (2009) H
│   ├── [664K]  .folder.png
│   └── [606M]  Zombieland (2009) H.mkv
└── [4.0K]  Zootopia (2016)
    ├── [203K]  .folder.png
    ├── [2.7G]  Zootopia (2016).mkv
    └── [119K]  Zootopia (2016).srt

これらの.folder.pngのサイズを160x160に変更します。答えはDeepディレクトリで動作するはずです。

その他のデータ

  • 画像は通常.pngですが、.icns.icoもあります
  • 画像は本当に深いディレクトリに保存できます
  • すべての画像のアスペクト比は1:1です
  • すべての画像の名前は.folder.extension
  • ここに回答 がありますが、1つの画像でのみ機能すると思います

詳細情報を提供させていただきます

5
Sumeet Deshmukh

私は簡単な解決策を見つけました、これらの次のコマンドを実行します

Sudo apt-get install nautilus-image-converter
nautilus -q
  • Nautilusを使用してディレクトリに移動します
  • Show hidden filesが有効になっていることを確認してください
  • .folderを検索します
  • 必要なすべてのファイルを選択します
  • 右クリックして選択 Resize Images
  • カスタムサイズオプションとして画像サイズを選択し、塗りつぶし幅= 160および高さ= 160
  • そして、ファイル名としてその場でサイズ変更
  • 押す Enter

画像のサイズを160に変更する必要があります

ソース


奇妙なことに、.icnsでは機能しませんでした

4
Yoginee Pingale

コマンドラインではありませんが、このpythonスクリプトはあなたのために仕事をするはずです:)

影響するルートディレクトリで実行します。

import PIL,os,glob

DIMENSIONS = (160,160)
FILETYPES = ['*.ico','*.icns','*.png']


def get_pictures_from_directory(subject_path,filetypes):
    lst = []
    for extension in filetypes:
        lst.extend(glob.glob(subject_path+"/"+extension))
    return (lst)

def get_folders_in_curr_directory(directory):
    return ([d for d in os.listdir(directory) if os.path.isdir(os.path.join(directory, d))])


def load_and_resize_image(img_path,size_Tuple):
    img = PIL.Image.open(img_path)
    img = img.resize(size_Tuple)
    return (img)

def save_image(img,img_path):
    img.save(img_path)


def resize_pictures(pictures,DIMENSIONS):
    for picture in pictures:
        img = load_and_resize_image(picture,DIMENSIONS)
        save_image(img,picture)

def run_recursive_resize(base_path,DIMENSIONS,FILETYPES):
    directories = get_folders_in_curr_directory(base_path)
    pictures = get_pictures_from_directory(base_path,FILETYPES)
    resize_pictures(pictures,DIMENSIONS)
    for directory in directories:
         next_path = base_path +'/'+ directory
         run_recursive_resize(next_path,DIMENSIONS,FILETYPES)

run_recursive_resize('.',DIMENSIONS,FILETYPES)
1
Wboy