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