Utente:Alex brollo/ritaglio.py

Da Wikisource.
Jump to navigation Jump to search
# -*- coding: utf-8 -*-
import sys
sys.path.append('C:\\Documents and Settings\\User\\Desktop\\svn-compat')
import wikipedia
from myscripts import *
from os import system, path
import userlib,query
from PIL import Image



'''{{}}'''

'''
Idea generale
1. dal nome pagina ottenere il nome file djvu
2. dal nome del file djvu ottenerne l'url e scaricarlo
3. estrarre l'immagine della pagina con djvuLibre
4. cropparla con PIL e salvarla in file locale
5. ricavare un template Information dai dati della pagina di descrizione
6. verificare che non esista un'immagine omonima su Commons
7. caricare su Commons

Funzione cropper(): salva un ritaglio con nome standard

Parametri di cropper(): 
pageName,pageWidth=1024,x=0,y=0,cropWidth=200,cropHeight=200,formato="jpg"

pageName: nome della pagina djvu (es Pagina:Georgiche.djvu/3)
pageWidth: larghezza dell'immagine a cui si riferiscono le coordinate di ritaglio
x,y: coordinate dell'angolo superiore sinistro 
cropWidth ,cropHeight: larghezza e altezza del ritaglio in pixel
formato: formato del file di output


'''
# step 1
def cropper(pageName,pageWidth=1024,x=0,y=0,cropWidth=200,cropHeight=200,formato="jpg"):
    posizioneSlash=pageName.rfind("/")
    posizioneDuepunti=pageName.find(":")
    baseNomePagina=pageName[posizioneDuepunti+1:posizioneSlash]
    numeroPagina=pageName[posizioneSlash+1:]
    nameDjvu="File:"+baseNomePagina
    commons=wikipedia.getSite("commons","commons")
    filePage=wikipedia.Page(commons,nameDjvu)
    fileImagePage=wikipedia.ImagePage(commons,nameDjvu)
    
    comando='curl "{url}" > "{name}"'.format(url=fileImagePage.fileUrl(),name=filePage.title().replace("File:",""))
    if not path.exists(baseNomePagina):
        system.comando
    comando='ddjvu -format=tiff -page={0} {1} "{2}"'.format(numeroPagina,baseNomePagina,"out.tiff")
    system(comando)
    img=Image.open("out.tiff")
    ratio=img.size[0]*1.0/pageWidth
    print img.size,ratio,pageWidth
    rectangle=(int(x*ratio),int(y*ratio),int((x+cropWidth)*ratio),int((y+cropHeight)*ratio))
    crop=img.crop(rectangle)
    nomeFileCrop=baseNomePagina.replace(".djvu","")+" pag"+numeroPagina+"."+formato
    crop.save(nomeFileCrop)
    return rectangle
#step 2: estrae da una pagina, contenente uno o più template Ritaglio, i parametri per cropper()
# WIP