Voici un échantillon de pixels de lecture.
Lire les pixels de l'image d'origine → Traiter → Ecrire les données traitées Cela devient la procédure telle que.
Plus précisément, lire les pixels → convertir en échelle de gris → convertir en nuances sépia → écrire des pixels Ce processus est exécuté pour tous les pixels un par un.
Je sais qu'il existe un moyen plus efficace.
L'image originale
Résultat d'exécution
Fonctionne sur Python 2.7. Il semble que PIL ne supporte pas encore la série Python 3.
image-sepia.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Filtre pour convertir l'image en sépia
Premier argument:Nom du fichier d'entrée
Deuxième argument:Nom du fichier de sortie (facultatif)
Le sépia est une peinture brun noir à l'encre de seiche, et rendre l'image sépia signifie lui donner l'impression d'avoir été dessinée.
-Extraire les informations de luminosité par échelle de gris
-Convertir le tout en brunâtre
'''
import sys
import Image
def grayscale(r,g,b):
'''
Convertir les valeurs RVB en échelle de gris (noir et blanc)
'''
#Méthode de calcul de la moyenne pondérée NTSC
gray = int(r * 0.298912 + g * 0.586611 + b * 0.114478)
#Méthode simple de calcul de la moyenne
#gray = int((r+g+b)/3)
return gray
def sepiatone(r,g,b):
'''
Convertir les valeurs RVB en sépia
Il ne semble y avoir aucune règle pour convertir en style sépia, donc si cela ressemble à ça, c'est OK.
'''
gray = grayscale(r,g,b)
#sr = int(gray * 0.9);sg = int(gray * 0.7);sb = int(gray * 0.4)
#sr = gray; sg = int(gray * 0.8);sb = int(gray * 0.6)
sr = int(gray * 0.8 + 2); sg = int(gray * 0.6 + 2);sb = int(gray * 0.4 + 2)
return sr,sg,sb
def make_image(infile, outfile):
'''
Convertir l'image en sépia
'''
img = Image.open(infile)
img = img.convert("RGB")
x,y = img.size
for ly in range( y):
for lx in range( x):
r,g,b = img.getpixel((lx, ly))
sr,sg,sb = sepiatone(r,g,b)
img.putpixel((lx,ly), (sr,sg,sb))
#↓ Si vous voulez lui donner un aspect un peu fané
#img.putpixel((lx,ly), ((r+sr)/2,(g+sg)/2,(b+sb)/2))
img.save(outfile)
return
def usage():
sys.stderr.write("Usage: %s infile [outfile] \n" % sys.argv[0])
return
if __name__ == '__main__':
argvs = sys.argv
argc = len(argvs)
#Vérification des arguments
if ((argc == 1 ) or (argc > 3)):
usage()
sys.exit(1)
if (argc > 2):
outfile = argvs[2]
else:
outfile = "output.png "
infile = argvs[1]
make_image(infile , outfile)
# EOF
Recommended Posts