На этот вопрос уже есть ответ здесь:
Я хочу изменить размер нескольких сохраненных изображений в нескольких подпапках в каталоге. И я хочу заменить эти изображения на изображения с измененным размером, удалив исходные
Почему?
У меня есть значки папок для большого количества контента в отдельном разделе. Некоторые из этих изображений имеют размер около мегабайта и 500x500, что, на мой взгляд, является излишним для значков папок на дисплее 1080p, и я думаю, что это также снижает производительность nautilus и занимает некоторое ценное пространство
Как устроена структура папок?
├── [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
.folder.extension
Я буду рад предоставить дополнительную информацию
Я нашел легкое решение, выполните эти после команд
sudo apt-get install nautilus-image-converter
nautilus -q
Show hidden files
включен.folder
Ваши изображения должны быть изменены к 160
Странно это не продолжало работать .icns
Не командная строка, но этот сценарий 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)