Gunakan Python untuk Menerapkan Filter pada Gambar DNG
Buat Aplikasi Python untuk Memfilter Gambar dan Foto DNG melalui API Server
Cara Memfilter Gambar dan Foto DNG dengan Python
Setiap foto yang diambil dengan baik membawa potensi untuk perbaikan, peluang untuk berkembang menjadi sesuatu yang benar-benar berbeda, dan muncul sebagai kreasi yang unik. Filter berfungsi sebagai alat serbaguna dalam penyempurnaan gambar dan foto, memungkinkan Anda meningkatkan ketajaman secara selektif, menimbulkan keburaman, atau menghilangkan artefak warna untuk hasil yang benar-benar berbeda. Bereksperimenlah dengan efek gambar satu per satu atau dalam kombinasi untuk memadukan gradien warna dengan mulus, menghilangkan noise yang tidak diinginkan, dan meningkatkan ketajaman tepi objek di foto Anda. Untuk menerapkan filter gambar ini ke file DNG, kami akan memanfaatkannya Aspose.Imaging for Python via .NET API yang merupakan API konversi dan manipulasi gambar yang kaya fitur, kuat, dan mudah digunakan untuk platform Python. Anda dapat menginstalnya menggunakan perintah berikut dari perintah sistem Anda.
Baris perintah sistem
>> pip install aspose-imaging-python-net
Langkah-langkah untuk Memfilter DNG melalui Python
Anda memerlukan aspose-imaging-python-net untuk mencoba alur kerja berikut di lingkungan Anda sendiri.
- Muat file DNG dengan metode Image.Load
- Filter gambar;
- Simpan gambar terkompresi ke disk dalam format yang didukung oleh Aspose.Imaging
Persyaratan sistem
Aspose.Imaging untuk Python didukung di semua sistem operasi utama. Pastikan saja Anda memiliki prasyarat berikut.
- Microsoft Windows / Linux dengan .NET Core Runtime.
- Manajer paket Python dan PyPi.
Filter gambar DNG - Python
from aspose.imaging import RasterImage, Image, IMultipageImage, Rectangle | |
from aspose.imaging.imagefilters.filteroptions import * | |
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 small_rectangular_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), SmallRectangularFilterOptions()), "smallrectangular") | |
def big_rectangular_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), BigRectangularFilterOptions()), "bigrectangular") | |
def sharpen_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), SharpenFilterOptions()), "sharpen") | |
def motion_wiener_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), MotionWienerFilterOptions(20, 2, 0)), "motionwiener") | |
def bilateral_smoothing_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), BilateralSmoothingFilterOptions()), "bilateralsmoothing") | |
def gauss_blur_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), GaussianBlurFilterOptions(5, 4)), "gaussblur") | |
def gauss_wiener_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), GaussWienerFilterOptions(5, 5)), "gausswiener") | |
def median_filter(): | |
filter_images(lambda image: image.filter(Rectangle(image.width // 6, image.height // 6, image.width * 2 // 3, image.height * 2 // 3), MedianFilterOptions(20)), "median") | |
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: | |
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: | |
page_index = 0 | |
for page in multi_page.pages: | |
file_name = f"{filter_name}_page{page_index}_{format_ext}.png" | |
do_filter(as_of(page, RasterImage)) | |
page.save(templates_folder + file_name, PngOptions()) | |
delete_file(templates_folder + file_name) | |
page_index += 1 | |
else: | |
do_filter(image) | |
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, "rasterized.{format_ext}.png") | |
with Image.load(input_file) as image: | |
image.save(output_file, PngOptions()) | |
return output_file | |
# run | |
median_filter() | |
Tentang Aspose.Imaging untuk Python API
Aspose.Imaging API adalah solusi pemrosesan gambar untuk membuat, memodifikasi, menggambar, atau mengonversi gambar (foto) dalam aplikasi. Menawarkan: pemrosesan gambar lintas platform, termasuk tetapi tidak terbatas pada konversi antara berbagai format gambar (termasuk pemrosesan gambar multi-halaman atau multi-bingkai yang seragam), modifikasi seperti menggambar, bekerja dengan grafik primitif, transformasi (mengubah ukuran, memotong, membalik & memutar , binarisasi, skala abu-abu, sesuaikan), fitur manipulasi gambar lanjutan (pemfilteran, dithering, masking, deskewing), dan strategi pengoptimalan memori. Ini adalah perpustakaan mandiri dan tidak bergantung pada perangkat lunak apa pun untuk operasi gambar. Seseorang dapat dengan mudah menambahkan fitur konversi gambar berkinerja tinggi dengan API asli dalam proyek. Ini adalah 100% API lokal pribadi dan gambar diproses di server Anda.Filter DNG melalui Aplikasi Online
Filter dokumen DNG dengan mengunjungi situs web Live Demos kami. Demo langsung memiliki manfaat sebagai berikut
DNG Apa DNG Format Berkas
DNG adalah format gambar kamera digital yang digunakan untuk penyimpanan file mentah. Ini telah dikembangkan oleh Adobe pada bulan September 2004. Ini pada dasarnya dikembangkan untuk fotografi digital. DNG adalah perpanjangan dari format standar TIFF/EP dan menggunakan metadata secara signifikan. Untuk memanipulasi data mentah dari kamera digital dengan fleksibilitas dan kontrol artistik yang mudah, fotografer memilih file mentah kamera. Format JPEG dan TIFF menyimpan gambar yang diproses oleh kamera, oleh karena itu tidak banyak ruang untuk perubahan yang tersedia dalam format tersebut.
Baca selengkapnyaFormat Filter yang Didukung Lainnya
Menggunakan Python, seseorang dapat dengan mudah memfilter berbagai format termasuk.