我想调整存储在目录中多个子文件夹中的多张图片的大小。我想删除原始图片,用调整大小后的图片替换这些图片
为什么?
我在一个单独的分区中存储了大量内容的文件夹图标。其中一些图像大约有 1 兆字节,尺寸为 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。答案应该适用于深的目錄。
其他数据
- 图像一般
.png
也是.icns
,.ico
- 图像可以存储在非常深的目录中
- 所有图像的长宽比均为 1:1
- 所有图像都有名称
.folder.extension
- 有一个在这里回答但我认为它只适用于一张图片
我很乐意提供更多信息
答案1
我找到了一个简单的解决方案,运行以下命令
sudo apt-get install nautilus-image-converter
nautilus -q
- 现在使用 Nautilus 进入目录
- 确保
Show hidden files
已启用 - 搜索
.folder
- 选择您想要的所有文件
- 右键单击并选择Resize Images
- 选择图像大小作为自定义尺寸选项,填充宽度 = 160 和高度 = 160
- 文件名为就地调整大小
- 按Enter
你的图片应该调整为 160
奇怪的是它不起作用.icns
答案2
虽然不是命令行,但是这个 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)