Durch Anwenden von Anti-Aliasing wird das Ruckeln beim Reduzieren des Fotos verringert. Python-Code, der alle Fotodateien in einem Ordner unter Beibehaltung des Seitenverhältnisses (Seitenverhältnis) reduziert, Anti-Aliasing anwendet und speichert.
Ich habe die Fotos von ungefähr 4000px auf 300px reduziert und sie verglichen. Im Vogelbild mit AA ist der kleine Sand auf dem Boden schwer zu erkennen, da die Farbe in den Boden integriert ist.
#PIL-Installation
pip install PIL --allow-external PIL --allow-unverified PIL
Es wurde bestätigt, dass es nur in der Python2.7-Umgebung von Mac funktioniert
resize.py
# -*- coding: utf-8 -*-
import commands
import Image
import re
#Bildhöhenpixel beim Verkleinern
PHOTO_HEIGHT = 300
#Vollständiger Pfad des Ordners, der das Bild enthält
BASE_DIR = "/Users/XXXXX/Desktop/Photos"
#Name des Bildes für reguläre Ausdrücke
PHOTO_REGEX = r"P.*.[jpg|JPG]"
#Bildpräfix nach Größenänderung
PHOTO_RESIZE_PREFIX = "r_"
def main():
#Holen Sie sich den vollständigen Bildpfad
_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)]
#Generieren Sie einen Ordner für die Ausgabe
commands.getoutput("mkdir {}/output".format(BASE_DIR))
#Vorhandene Datei im Lesemodus lesen
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) #Schrumpfen
def resize(before, after, height=PHOTO_HEIGHT, filename="", aa_enable=True):
"""
Bildgröße anpassen
:param str before:Pfad der Originalbilddatei
:param str after:Bilddateipfad nach Größenänderung
:param int height:Bildhöhe nach Größenänderung
:param bool aa_enable:Gibt an, ob Antialiasing aktiviert werden soll
:return:
"""
#Bild schreibgeschützt öffnen
img = Image.open(before, 'r')
#Berechnen Sie die Bildpixel nach der Größenänderung
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:
#Mit Antialiasing schrumpfen
resize_img.thumbnail((x, y), Image.ANTIALIAS)
else:
#Schrumpfen ohne Antialiasing
resize_img = resize_img.resize((x, y))
#Speichern Sie das Bild nach der Größenänderung
resize_img.save(after, 'jpeg', quality=100)
print "RESIZED!:{}[{}x{}] --> {}x{}".format(filename, before_x, before_y, x, y)
#Lauf
main()
Ausführungsergebnis
>>> 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