Verwenden Sie Python für das Dithering von EMF-Bildern
Erstellen Sie Python-Apps zum Dithern von EMF-Bildern und Fotos über Server-APIs
So dithern Sie EMF-Bilder und Fotos mit Python
Die Verbesserung der Bild- und Fotoparameter für eine Website wirkt sich erheblich auf den Webverkehr aus. Zu diesen Optimierungen gehört die Reduzierung der Farbpalette eines Bildes, wodurch die Dateigröße effektiv minimiert und das Laden der Seite beschleunigt wird. Um jedoch abrupte Kanten oder Störungen im Farbverlauf zu vermeiden, empfiehlt sich der Einsatz der Dithering-Methode. Diese Technik hilft dabei, Farbübergänge zu verfeinern und die Gesamtbildqualität zu verbessern. Es entsteht ein leichtes „Rauschen“, das die Bildwahrnehmung positiv beeinflusst. Für Dithering-Bilder im Format EMF wenden wir an Aspose.Imaging for Python via .NET API, eine funktionsreiche, leistungsstarke und benutzerfreundliche Bildbearbeitungs- und Konvertierungs-API für die Python-Plattform. Sie können es mit dem folgenden Befehl aus Ihrem Systembefehl installieren.
Die Systembefehlszeile
>> pip install aspose-imaging-python-net
Schritte zum Dithern von EMFs über Python
Sie benötigen aspose-imaging-python-net , um den folgenden Workflow in Ihrer eigenen Umgebung auszuprobieren.
- Laden Sie EMF-Dateien mit der Image.Load-Methode
- Dither-Bilder;
- Speichern Sie komprimierte Bilder im von Aspose.Imaging unterstützten Format auf Disc
System Anforderungen
Aspose.Imaging für Python wird auf allen wichtigen Betriebssystemen unterstützt. Stellen Sie einfach sicher, dass Sie die folgenden Voraussetzungen erfüllen.
- Microsoft Windows / Linux mit .NET Core Runtime.
- Python- und PyPi-Paketmanager.
Dither-Bilder von EMF - Python
from aspose.imaging import Image, RasterImage, DitheringMethod, IMultipageImage | |
from aspose.imaging.imageoptions import PngOptions | |
from aspose.pycore import as_of, is_assignable | |
import os | |
if 'TEMPLATE_DIR' in os.environ: | |
templates_folder = os.environ['TEMPLATE_DIR'] | |
else: | |
templates_folder = r"C:\Users\USER\Downloads\templates" | |
delete_output = 'SAVE_OUTPUT' not in os.environ | |
def delete_file(file): | |
if delete_output: | |
os.remove(file) | |
def floyd_steinberg_dithering(): | |
filter_images(lambda image: image.dither(DitheringMethod.FLOYD_STEINBERG_DITHERING, 4), "floydsteinbergdithering") | |
def threshold_dithering(): | |
filter_images(lambda image: image.dither(DitheringMethod.THRESHOLD_DITHERING, 4), "thresholddithering") | |
def filter_images(do_filter, filter_name): | |
obj_init = [] | |
obj_init.append("jpg") | |
obj_init.append("png") | |
obj_init.append("bmp") | |
obj_init.append("apng") | |
obj_init.append("dicom") | |
obj_init.append("jp2") | |
obj_init.append("j2k") | |
obj_init.append("tga") | |
obj_init.append("webp") | |
obj_init.append("tiff") | |
obj_init.append("gif") | |
obj_init.append("ico") | |
raster_formats = obj_init | |
obj_init2 = [] | |
obj_init2.append("svg") | |
obj_init2.append("otg") | |
obj_init2.append("odg") | |
obj_init2.append("eps") | |
obj_init2.append("wmf") | |
obj_init2.append("emf") | |
obj_init2.append("wmz") | |
obj_init2.append("emz") | |
obj_init2.append("cmx") | |
obj_init2.append("cdr") | |
vector_formats = obj_init2 | |
all_formats = raster_formats | |
all_formats.extend(vector_formats) | |
for format_ext in all_formats: | |
input_file = os.path.join(templates_folder, f"template.{format_ext}") | |
is_vector_format = format_ext in vector_formats | |
if is_vector_format: | |
input_file = rasterize_vector_image(format_ext, input_file) | |
output_file = os.path.join(templates_folder, f"{filter_name}_{format_ext}.png") | |
print(format_ext) | |
# explicit type casting from Image to RasterImage | |
with as_of(Image.load(input_file), RasterImage) as image: | |
do_filter(image) | |
multi_page = None | |
# if image implements an IMultipageImage interface | |
if is_assignable(image, IMultipageImage): | |
multi_page = as_of(image, IMultipageImage) | |
if multi_page is not None and multi_page.page_count > 1: | |
# for loop | |
for_first_step = True | |
page_index = 0 | |
for page in multi_page.pages: | |
file_name = os.path.join( | |
templates_folder, | |
f"{filter_name}_page{page_index}_{format_ext}.png") | |
page.save(file_name, PngOptions()) | |
delete_file(file_name) | |
page_index += 1 | |
else: | |
image.save(output_file, PngOptions()) | |
delete_file(output_file) | |
if is_vector_format: | |
delete_file(input_file) | |
def rasterize_vector_image(format_ext, input_file): | |
output_file = os.path.join(templates_folder, f"rasterized.{format_ext}.png") | |
with Image.load(input_file) as image: | |
image.save(output_file, PngOptions()) | |
return output_file | |
# run | |
floyd_steinberg_dithering() | |
threshold_dithering() |
Über Aspose.Imaging für die Python-API
Aspose.Imaging API ist eine Bildverarbeitungslösung zum Erstellen, Ändern, Zeichnen oder Konvertieren von Bildern (Fotos) in Anwendungen. Es bietet: plattformübergreifende Bildverarbeitung, einschließlich, aber nicht beschränkt auf Konvertierungen zwischen verschiedenen Bildformaten (einschließlich einheitlicher Mehrseiten- oder Multiframe-Bildverarbeitung), Modifikationen wie Zeichnen, Arbeiten mit grafischen Grundelementen, Transformationen (Größe ändern, Zuschneiden, Spiegeln und Drehen , Binarisierung, Graustufen, Anpassen), erweiterte Bildbearbeitungsfunktionen (Filtern, Dithering, Maskieren, Entzerren) und Strategien zur Speicheroptimierung. Es ist eine eigenständige Bibliothek und hängt von keiner Software für Bildoperationen ab. Mit nativen APIs können innerhalb von Projekten problemlos hochleistungsfähige Bildkonvertierungsfunktionen hinzugefügt werden. Dies sind 100 % private lokale APIs und Bilder werden auf Ihren Servern verarbeitet.Dither EMFs über die Online-App
Dithern Sie EMF-Dokumente, indem Sie unsere [Live-Demo-Website] ( https://products.aspose.app/imaging/image-Dither ) besuchen. Die Live-Demo hat die folgenden Vorteile
EMF Was ist EMF Datei Format
Enhanced Metafile Format (EMF) speichert grafische Bilder geräteunabhängig. Metadateien von EMF bestehen aus Datensätzen variabler Länge in chronologischer Reihenfolge, die das gespeicherte Bild nach dem Analysieren auf jedem Ausgabegerät wiedergeben können. Diese Datensätze mit variabler Länge können Definitionen eingeschlossener Objekte, Zeichenbefehle und Grafikeigenschaften sein, die für die genaue Wiedergabe des Bildes entscheidend sind. Wenn ein Gerät eine EMF-Metadatei mit seiner eigenen Grafikumgebung öffnet, bleiben die Proportionen, Abmessungen, Farben und andere Grafikeigenschaften des Originalbilds gleich, unabhängig von der Plattform des öffnenden Geräts.
WesenAndere unterstützte Dither-Formate
Mit Python kann man problemlos verschiedene Formate dithern, einschließlich.