Python - L'anti-aliasing réduit magnifiquement les photos

L'application de l'anti-crénelage réduira les saccades lors de la réduction de la photo. Code Python qui réduit tous les fichiers photo dans un dossier tout en conservant le rapport hauteur / largeur (rapport hauteur / largeur), applique l'anti-aliasing et les enregistre.

Comparaison avec / sans anti-alias

J'ai réduit les photos d'environ 4000 pixels à 300 pixels et les ai comparées. Dans l'image d'oiseau avec AA, le petit sable sur le sol est difficile à voir car la couleur est intégrée au sol.

スクリーンショット 2015-11-19 21.03.02.png スクリーンショット 2015-11-19 21.03.06.png

Installation

#Installation de PIL
pip install PIL --allow-external PIL --allow-unverified PIL

Agrandissement et code de réduction

Confirmé pour fonctionner uniquement dans l'environnement python2.7 de mac

resize.py



# -*- coding: utf-8 -*-
import commands
import Image
import re

#Pixels de hauteur d'image lors de la réduction
PHOTO_HEIGHT = 300

#Chemin complet du dossier contenant l'image
BASE_DIR = "/Users/XXXXX/Desktop/Photos"

#Nom d'expression régulière de l'image
PHOTO_REGEX = r"P.*.[jpg|JPG]"

#Préfixe d'image après redimensionnement
PHOTO_RESIZE_PREFIX = "r_"


def main():
    #Obtenir le chemin complet de l'image
    _cmd = "cd {} && ls".format(BASE_DIR)
    l = commands.getoutput(_cmd)
    l = l.split("\n")
    l = [_l for _l in l if re.match(PHOTO_REGEX, _l)]

    #Générer un dossier pour la sortie
    commands.getoutput("mkdir {}/output".format(BASE_DIR))

    #Lire le fichier existant en mode lecture
    for _l in l:
        before_path = '{}/{}'.format(BASE_DIR, _l)
        filename = '{}{}'.format(PHOTO_RESIZE_PREFIX, _l)
        after_path = '{}/output/{}'.format(BASE_DIR, filename)
        resize(before_path, after_path, filename=_l)  #Rétrécir


def resize(before, after, height=PHOTO_HEIGHT, filename="", aa_enable=True):
    """
Redimensionner l'image
    :param str before:Chemin du fichier image d'origine
    :param str after:Chemin du fichier image après le redimensionnement
    :param int height:Hauteur de l'image après le redimensionnement
    :param bool aa_enable:Activer l'anticrénelage
    :return:
    """
    #Ouvrir l'image en lecture seule
    img = Image.open(before, 'r')
    #Calculer les pixels de l'image après le redimensionnement
    before_x, before_y = img.size[0], img.size[1]
    x = int(round(float(height / float(before_y) * float(before_x))))
    y = height
    resize_img = img
    if aa_enable:
        #Rétrécir avec l'anticrénelage
        resize_img.thumbnail((x, y), Image.ANTIALIAS)
    else:
        #Rétrécir sans antialiasing
        resize_img = resize_img.resize((x, y))

    #Enregistrer l'image après le redimensionnement
    resize_img.save(after, 'jpeg', quality=100)
    print "RESIZED!:{}[{}x{}] --> {}x{}".format(filename, before_x, before_y, x, y)

#Courir
main()

Résultat d'exécution


>>> python resize.py
RESIZED!:P1040673.jpg[4592x3448] --> 400x300
RESIZED!:P1050388.JPG[4592x3448] --> 400x300
RESIZED!:P1050389.JPG[4592x3448] --> 400x300
RESIZED!:P1050390.JPG[4592x3448] --> 400x300
RESIZED!:P1050391.JPG[4592x3448] --> 400x300
RESIZED!:P1050392.JPG[4592x3448] --> 400x300
RESIZED!:P1050393.JPG[4592x3448] --> 400x300
RESIZED!:P1050394.JPG[4592x3448] --> 400x300

Recommended Posts

Python - L'anti-aliasing réduit magnifiquement les photos
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Jouez avec 2016-Python
Testé avec Python
avec syntaxe (Python)
Bingo avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python
Analyse de données avec python 2
Grattage en Python (préparation)
Essayez de gratter avec Python.
Apprendre Python avec ChemTHEATER 03
Recherche séquentielle avec Python
"Orienté objet" appris avec python
Exécutez Python avec VBA
Manipuler yaml avec python
Résolvez AtCoder 167 avec python
Communication série avec python
[Python] Utiliser JSON avec Python
Apprendre Python avec ChemTHEATER 05-1
Apprenez Python avec ChemTHEATER
1.1 Premiers pas avec Python
Binarisation avec OpenCV / Python
3. 3. Programmation IA avec Python
Méthode Kernel avec Python
Non bloquant avec Python + uWSGI
Grattage avec Python + PhantomJS
Publier des tweets avec python
Conduisez WebDriver avec python
Utiliser mecab avec Python 3
Analyse vocale par python
Pensez à yaml avec python
Utiliser Kinesis avec Python
Premiers pas avec Python
Utiliser DynamoDB avec Python
Getter Zundko avec python
Gérez Excel avec python
Loi d'Ohm avec Python
Jugement des nombres premiers avec python
Exécutez Blender avec python
Résoudre des maths avec Python
Python à partir de Windows 7
Carte thermique par Python + matplotlib
Multi-processus de manière asynchrone avec python
Programmation Python avec Atom
Utilisez Python 3.8 avec Anaconda
Programmation compétitive avec python
Manipuler rabbimq avec python
GRPC commençant par Python