User Tools

Site Tools


photography:scripts

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

photography:scripts [2012/06/15 07:22] (current)
cedric created
Line 1: Line 1:
 +====== Compare folder contents ======
 +===== Find incoherence in your backups =====
 +<code bash>
 +cedric@debian:​~/​multimedia$ find ./​photographs/​ -type f -exec sha1sum {} \; | sort > dir1_sha1
 +cedric@debian:​~/​multimedia$ cd /mnt/nas/
 +cedric@debian:/​mnt/​nas$ find ./​photographs/​ -type f -exec sha1sum {} \; | sort > dir2_sha1
 +cedric@debian:/​mnt/​nas$ diff --brief /​home/​cedric/​multimedia/​dir1_sha1 ./dir2_sha1
 +</​code>​
  
 +
 +
 +====== Focal length repartition ======
 +
 +<code python>
 +#​!/​usr/​bin/​env python
 +# -*- coding: utf-8 -*-
 +
 +import pylab
 +import glob
 +from collections import Counter
 +
 +from PIL import Image
 +from PIL.ExifTags import TAGS
 +
 +
 +DIRECTORY = "/​home/​cedric/​vienna/​*.JPG"​
 +
 +
 +def get_exif(fn):​
 +    ret = {}
 +    i = Image.open(fn)
 +    info = i._getexif()
 +    if info is not None:
 +        for tag, value in info.items():​
 +            decoded = TAGS.get(tag,​ tag)
 +            ret[decoded] = value
 +    return ret
 +
 +
 +
 +if __name__ == "​__main__":​
 +    cnt = Counter()
 +    pictures = glob.glob(DIRECTORY)
 +    focal = Counter()
 +    for picture in pictures:
 +        exif = get_exif(picture)
 +        if exif != {}:
 +            focal[exif['​FocalLength'​][0]] += 1
 +
 +    if focal:
 +        length = len(focal)
 +        ind = pylab.arange(length)
 +        width = 0.35 # bars width
 +
 +        focal_list = [elem for elem in focal.keys()]
 +        focal_count = [elem for elem in focal.values()]
 +        max_focal_count = max(focal_count) ​ # max focal_count
 +
 +        p = pylab.bar(ind,​ focal_count,​ width, color='​r'​)
 +
 +        pylab.ylabel("​Number of shots"​)
 +        pylab.xlabel("​Focal length"​)
 +        pylab.title("​Focal length repartition for " + str(sum(focal_count)) + " pictures"​)
 +        pylab.xticks(ind + (width / 2), focal_list)
 +        pylab.xlim(-width,​ len(ind))
 +
 +        # changing the ordinate scale according to the max.
 +        if max_focal_count <= 100:
 +            pylab.ylim(0,​ max_focal_count + 5)
 +            pylab.yticks(pylab.arange(0,​ max_focal_count + 5, 5))
 +        elif max_focal_count <= 200:
 +            pylab.ylim(0,​ max_focal_count + 10)
 +            pylab.yticks(pylab.arange(0,​ max_focal_count + 10, 10))
 +        elif max_focal_count <= 600:
 +            pylab.ylim(0,​ max_focal_count + 25)
 +            pylab.yticks(pylab.arange(0,​ max_focal_count + 25, 25))
 +        elif max_focal_count <= 800:
 +            pylab.ylim(0,​ max_focal_count + 50)
 +            pylab.yticks(pylab.arange(0,​ max_focal_count + 50, 50))
 +
 +
 +        for rect in p:
 +            height = rect.get_height()
 +            pylab.text(rect.get_x()+rect.get_width()/​2.,​ 1.05*height,​ '​%d'​%int(height),​
 +                    ha='​center',​ va='​bottom'​)
 +
 +
 +        pylab.show()
 +    else:
 +        print "No result."​
 +</​code>​
 +        ​
 +        ​
 +        ​
 +====== Piwigo ======
 +
 +<code python>
 +! /​usr/​local/​bin/​python
 +-*- coding: utf-8 -*- 
 +
 +"""​piwigo.py
 +
 +Usefull for your Piwigo gallery (http://​www.piwigo.org/​).
 +
 +./piwigo
 +
 +    ./photos
 +        ./​thumbnail/​
 +        ./pwg_high/
 +            ./​original_image01.jpg
 +            .
 +            .
 +            ./​original_imageN.jpg
 +    ./piwigo.py
 +
 +Resize images from /pwg_high (original images) directory in two size :
 +
 + - 128*128 pixels in ./​piwigo/​photos/​thumbnail ;
 + - 1024*768 pixels in ./​piwigo/​photos/​ .
 +
 +"""​
 +
 +__author__ = "​Cedric Bonhomme"​
 +__date__ = "​$Date:​ 2009/03/22 $"
 +__copyright__ = "​Copyright (c) 2009 Cedric Bonhomme"​
 +__license__ = "GPL v3"
 +
 +import re import os import Image
 +
 +def search_files(motif,​ root_path):
 +
 +    """​Return a list of tuple (path, files).
 +
 +    Search fo files containing '​motif'​ that
 +    aren't symbolic links.
 +    """​
 +    result = []
 +    w = os.walk(root_path)
 +    for (path, dirs, files) in w:
 +        for f in files:
 +            if re.compile(motif).search(f):​
 +                # if not a symbolic link
 +                if not os.path.islink(os.path.join(path,​ f)):
 +                    result.append((os.path.join(path,​ f), f))
 +    return result
 +
 +images = search_files("​.jpg",​ "​./​photos/​pwg_high"​)
 +
 +for image in images:
 +
 +    im = Image.open(image[0])
 +
 +    im_thumbnail = im.resize((128,​ 128), Image.ANTIALIAS)
 +    im_thumbnail.save("​./​photos/​thumbnail/​TN-"​ + image[1], quality = 100)
 +
 +    im_slide = im.resize((1024,​ 768), Image.NEAREST)
 +    im_slide.save("​./​photos/"​ + image[1], quality = 100)
 +
 +"""​ Filter options to resize the image :
 +
 +    Use nearest neighbour :
 +        Image.NEAREST
 +    Linear interpolation in a 2x2 environment :
 +        Image.BILINEAR
 +    Cubic spline interpolation in a 4x4 environment :
 +        Image.BICUBIC
 +    Best down-sizing filter :
 +        Image.ANTIALIAS
 +
 +"""​
 +</​code>​
 +
 +On peut facilement ajouter le transfert FTP du résultat dans le dossier distant qui va bien.
 +
 +
 +====== Watermark avec ImageMagick ======
 +
 +<code bash>
 +[cedric@localhost ~]$ convert 16-04-2008_0167.jpg -font Arial -pointsize 40 -draw "​gravity south > fill black text 0,12 '​Cédric Bonhomme'​ > fill white text 1,11 '​Cédric Bonhomme'​ " wmark_text_drawn.jpg
 +</​code>​
 +
 +
 +====== Effet Polaroid ======
 +
 +<code bash>
 +convert picture.jpg -thumbnail 240 -bordercolor white -background black +polaroid picture-pola.png
 +</​code>​
photography/scripts.txt · Last modified: 2012/06/15 07:22 by cedric