LINUX.ORG.RU

Сгруппировать картинки по разрешению


0

1

Добрый день. У меня ест ькуча несортированых обоев, и надо их разделить: 1680x1090 отдельно, 1024x768 отдельно, и так далее. В голову не приходит как это делать, дайте решение или хотя-бы утилиту для определения разрешения.

утилиту для определения разрешения

identify

GotF ★★★★★
()
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
""" sorts images by resolution"""
 
 
import os,sys
import time
 
dirname = os.path.abspath(sys.argv[1])
try:
    newdir = os.path.abspath(sys.argv[2])
except:
    newdir = dirname
 
 
def image_sort(dirname, newdir, recur= 0):
    if not recur:print 'sorting started ...'
    else: print 'sorting started in %s...'%dirname
    if not newdir: newdir = dirname
 
    imagelist = []
 
    if os.path.isdir(dirname):
        for x in os.listdir(dirname):
            absx = dirname+os.sep+x
            if os.path.isfile(absx):imagelist.append(absx)
            else:
                image_sort(absx, newdir+os.sep+x,recur=1)
        for name in imagelist:
            try:
                file_date = time.localtime(os.stat(name).st_mtime)
            except EnvironmentError, error:
                print 'seems error: %s with '%error, name, '/n'
                continue
            imdir = '%s--%s--%s'%(file_date.tm_year,file_date.tm_mon,file_date.tm_mday)
            imdir = os.path.join(newdir,imdir)
            if os.path.split(dirname)[-1] == os.path.split(imdir)[-1]: 
                continue 
            elif not os.path.exists(imdir):
                print 'making dir %s'%imdir
                os.mkdir(imdir)
            try:
                os.system('move "%s" "%s"'%(name,imdir))
            except EnvironmentError:
                print 'error with '+ name, '/n'
    if not recur:print 'sorting completed!'
 
if __name__ == '__main__':
    image_sort(dirname, newdir)
hira_saka
()
Ответ на: комментарий от StReLoK
[flareguner@citadel Wallpapers]$ python2 sort.py 
Traceback (most recent call last):
  File "sort.py", line 9, in <module>
    dirname = os.path.abspath(sys.argv[1])
IndexError: list index out of range
flareguner
() автор топика

Вот, как раз недавно делал. Директория с изображениями передается в качестве аргумента.

Если скрипт кривоват — не судите строго, это первый скрипт на баше, который я писал.


#!/bin/bash

declare -a SIZES
SIZES=(1000x750 900x1200 900x900 1280x960 1000x1000 1200x900 1600x1200 640x480 700x900 1024x768 849x1200 800x600 1500x1500 600x800 640x800 1280x1024 1050x1500 715x1000 700x700 700x1000 800x800 1200x1200 600x600 750x1000 640x640 1200x1600 708x1000 567x800 800x1200 500x500 707x1000 566x800 1000x1400 600x750 768x1024 500x600 700x800 600x900 800x1067 572x800 480x640 1277x1200 850x1200 400x400 850x637 3000x4000 4000x3000 98x98 593x766 400x514 675x675 1920x1080)
JPEG="image/jpeg"

cd "$1"

for SIZE in ${SIZES[*]}; do
        if [ ! -e "$SIZE" ]
        then mkdir $SIZE
        fi
done

for ELEMENT in *; do
        if [ -f "$ELEMENT" ]
        then
                MIME=`file --mime-type "$ELEMENT" | awk '{print $2}'`
                if [ "$MIME" = "$JPEG" ]
                then
                        SIZE=`identify "$ELEMENT" | awk '{print $3}'`
                        case "$SIZE" in
                                "${SIZES[1]}"   ) mv "$ELEMENT" "${SIZES[1]}"   ;;
                                "${SIZES[2]}"   ) mv "$ELEMENT" "${SIZES[2]}"   ;;
                                "${SIZES[3]}"   ) mv "$ELEMENT" "${SIZES[3]}"   ;;
                                "${SIZES[4]}"   ) mv "$ELEMENT" "${SIZES[4]}"   ;;
                                "${SIZES[5]}"   ) mv "$ELEMENT" "${SIZES[5]}"   ;;
                                "${SIZES[6]}"   ) mv "$ELEMENT" "${SIZES[6]}"   ;;
                                "${SIZES[7]}"   ) mv "$ELEMENT" "${SIZES[7]}"   ;;
                                "${SIZES[8]}"   ) mv "$ELEMENT" "${SIZES[8]}"   ;;
                                "${SIZES[9]}"   ) mv "$ELEMENT" "${SIZES[9]}"   ;;
                                "${SIZES[10]}"  ) mv "$ELEMENT" "${SIZES[10]}"  ;;
                                "${SIZES[11]}"  ) mv "$ELEMENT" "${SIZES[11]}"  ;;
                                "${SIZES[12]}"  ) mv "$ELEMENT" "${SIZES[12]}"  ;;
                                "${SIZES[13]}"  ) mv "$ELEMENT" "${SIZES[13]}"  ;;
                                "${SIZES[14]}"  ) mv "$ELEMENT" "${SIZES[14]}"  ;;
                                "${SIZES[15]}"  ) mv "$ELEMENT" "${SIZES[15]}"  ;;
                                "${SIZES[16]}"  ) mv "$ELEMENT" "${SIZES[16]}"  ;;
                                "${SIZES[17]}"  ) mv "$ELEMENT" "${SIZES[17]}"  ;;
                                "${SIZES[18]}"  ) mv "$ELEMENT" "${SIZES[18]}"  ;;
                                "${SIZES[19]}"  ) mv "$ELEMENT" "${SIZES[19]}"  ;;
                                "${SIZES[20]}"  ) mv "$ELEMENT" "${SIZES[20]}"  ;;
                                "${SIZES[21]}"  ) mv "$ELEMENT" "${SIZES[21]}"  ;;
                                "${SIZES[22]}"  ) mv "$ELEMENT" "${SIZES[22]}"  ;;
                                "${SIZES[23]}"  ) mv "$ELEMENT" "${SIZES[23]}"  ;;
                                "${SIZES[24]}"  ) mv "$ELEMENT" "${SIZES[24]}"  ;;
                                "${SIZES[25]}"  ) mv "$ELEMENT" "${SIZES[25]}"  ;;
                                "${SIZES[26]}"  ) mv "$ELEMENT" "${SIZES[26]}"  ;;
                                "${SIZES[27]}"  ) mv "$ELEMENT" "${SIZES[27]}"  ;;
                                "${SIZES[28]}"  ) mv "$ELEMENT" "${SIZES[28]}"  ;;
                                "${SIZES[29]}"  ) mv "$ELEMENT" "${SIZES[29]}"  ;;
                                "${SIZES[30]}"  ) mv "$ELEMENT" "${SIZES[30]}"  ;;
                                "${SIZES[31]}"  ) mv "$ELEMENT" "${SIZES[31]}"  ;;
                                "${SIZES[32]}"  ) mv "$ELEMENT" "${SIZES[32]}"  ;;
                                "${SIZES[33]}"  ) mv "$ELEMENT" "${SIZES[33]}"  ;;
                                "${SIZES[34]}"  ) mv "$ELEMENT" "${SIZES[34]}"  ;;
                                "${SIZES[35]}"  ) mv "$ELEMENT" "${SIZES[35]}"  ;;
                                "${SIZES[36]}"  ) mv "$ELEMENT" "${SIZES[36]}"  ;;
                                "${SIZES[37]}"  ) mv "$ELEMENT" "${SIZES[37]}"  ;;
                                "${SIZES[38]}"  ) mv "$ELEMENT" "${SIZES[38]}"  ;;
                                "${SIZES[39]}"  ) mv "$ELEMENT" "${SIZES[39]}"  ;;
                                "${SIZES[40]}"  ) mv "$ELEMENT" "${SIZES[40]}"  ;;
                                "${SIZES[41]}"  ) mv "$ELEMENT" "${SIZES[41]}"  ;;
                                "${SIZES[42]}"  ) mv "$ELEMENT" "${SIZES[42]}"  ;;
                                "${SIZES[43]}"  ) mv "$ELEMENT" "${SIZES[43]}"  ;;
                                "${SIZES[44]}"  ) mv "$ELEMENT" "${SIZES[44]}"  ;;
                                "${SIZES[45]}"  ) mv "$ELEMENT" "${SIZES[45]}"  ;;
                                "${SIZES[46]}"  ) mv "$ELEMENT" "${SIZES[46]}"  ;;
                                "${SIZES[47]}"  ) mv "$ELEMENT" "${SIZES[47]}"  ;;
                                "${SIZES[48]}"  ) mv "$ELEMENT" "${SIZES[48]}"  ;;
                                "${SIZES[49]}"  ) mv "$ELEMENT" "${SIZES[49]}"  ;;
                                "${SIZES[50]}"  ) mv "$ELEMENT" "${SIZES[50]}"  ;;
                                "${SIZES[51]}"  ) mv "$ELEMENT" "${SIZES[51]}"  ;;
                                "${SIZES[52]}"  ) mv "$ELEMENT" "${SIZES[52]}"  ;;
                                "${SIZES[53]}"  ) mv "$ELEMENT" "${SIZES[53]}"  ;;
                                "${SIZES[54]}"  ) mv "$ELEMENT" "${SIZES[54]}"  ;;
                                "${SIZES[55]}"  ) mv "$ELEMENT" "${SIZES[55]}"  ;;
                                "${SIZES[56]}"  ) mv "$ELEMENT" "${SIZES[56]}"  ;;
                                "${SIZES[57]}"  ) mv "$ELEMENT" "${SIZES[57]}"  ;;
                                "${SIZES[58]}"  ) mv "$ELEMENT" "${SIZES[58]}"  ;;
                                "${SIZES[59]}"  ) mv "$ELEMENT" "${SIZES[59]}"  ;;
                        esac

                fi
        fi
done

for SIZE in ${SIZES[*]}; do
        if [ ! "$(ls -A $SIZE)" ]
        then rmdir $SIZE
        fi
done

geladil
()

В dolphin 2.1 такое будет.

AX ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.