Доброго времени суток. Читая хабр, я наткнулся на статью «Сортировка изображений по разрешению с помощью Python и PIL» (позднее появилась статья «Сортировка изображений по разрешению… на сцене PowerShell» ), почитал комментарии и захотелось написать что-то подобное на Ruby.
Прошу не судить меня, а только критиковать! На самом деле только недавно начал изучать Ruby, а точнее это моя первая программа, так что любые найденные ошибки будут только на пользу. Программа написана на Ruby с использованием библиотеки RMagick. Как работает программа:
1) Пользователь вводит путь к директории с картинками (jpg,png,gif расширяется элементарно — (jpg|png|gif|другие форматы)
2) Потом путь к папке, в которой будут созданы поддиректории с именем равным разрешению картинок.
3) Далее программа «бегает» рекурсивно по директориям с картинками, найдя файлы с расширением jpg|png|gif, определяется разрешение и проверяется наличие директории с соответствующим разрешением в названии, если такой нет — создает.
4) Копирует файл, считает количество копированных файлов.
Код на Ruby выглядит немного красивее — мое мнение. Думаю, некоторым людям будет интересно сравнить аналогичный код Ruby и Python, вот только в моей программе копирование файлов вместо перемещения.
Что не сделано: проверка на существование копируемого файла и в случае существования – переименовывание.
Результат:
Так получилось, что картинки для теста имели разный размер.
Прошу не судить меня, а только критиковать! На самом деле только недавно начал изучать Ruby, а точнее это моя первая программа, так что любые найденные ошибки будут только на пользу. Программа написана на Ruby с использованием библиотеки RMagick. Как работает программа:
1) Пользователь вводит путь к директории с картинками (jpg,png,gif расширяется элементарно — (jpg|png|gif|другие форматы)
2) Потом путь к папке, в которой будут созданы поддиректории с именем равным разрешению картинок.
3) Далее программа «бегает» рекурсивно по директориям с картинками, найдя файлы с расширением jpg|png|gif, определяется разрешение и проверяется наличие директории с соответствующим разрешением в названии, если такой нет — создает.
4) Копирует файл, считает количество копированных файлов.
Код на Ruby выглядит немного красивее — мое мнение. Думаю, некоторым людям будет интересно сравнить аналогичный код Ruby и Python, вот только в моей программе копирование файлов вместо перемещения.
Что не сделано: проверка на существование копируемого файла и в случае существования – переименовывание.
Copy Source | Copy HTML
- require 'find'
- require 'fileutils'
- require 'RMagick'
-
-
- def image_sort(unsort_path, sort_path)
- count = 0
- if !File.directory?(sort_path)
- FileUtils.mkdir sort_path
- end
- if File.directory?(unsort_path)
- Find.find(unsort_path) { |fname|
- if /\.(jpg|png|gif)$/i =~ fname
- count += 1
- img = Magick::Image::read(fname).first
- wh_dir_name = img.columns.to_s + 'x' + img.rows.to_s
- if !File.directory?(sort_path + wh_dir_name)
- FileUtils.mkdir sort_path + wh_dir_name
- end
- FileUtils.cp(fname, sort_path + wh_dir_name)
- puts fname + ' copied'
- end
- }
- else
- puts unsort_path + ' not found'
- end
- puts count.to_s + ' file(s) copied'
- end
-
- puts 'Path to pictures: '
- pd = gets
- pd.chomp!
- puts 'Path to new sort directory: '
- sd = gets
- sd.chomp!
- image_sort( pd, sd )
Результат:
Так получилось, что картинки для теста имели разный размер.