PPTX DOCX XLSX PDF ODP
Aspose.Imaging  для Python
EMF

Используйте Python для изменения фона EMF изображений

Изменяйте фон EMF изображений и фотографий с использованием собственных Python приложений и серверных API

Как изменить фон EMF изображения используя библиотеку для Python

Часто при работе с изображением EMF требуется поменять его фон. Для выделения областей относящихся к фону, первым шагом является определения объектов на переднем плане фотографии, и их отделение от остальной части изображения. Если фон представляет собой равномерную область, формирование контуров объектов возможно автоматически. В случае неравномерного фона на фотографии или сложностей с отделением желаемого объекта от заднего плана, рекомендуется использовать метод предварительной разметки изображения. Следует выделить прямоугольные области на фотографии, где располагаются ожидаемые объекты, и указать их тип. Это действие можно выполнить вручную или воспользоваться Cloud API для автоматического определения объектов. После выделения объектов и удаления исходного фона можно установить новый фон или сделать его прозрачным. Для изменения фона изображения в формате EMF мы воспользуемся Aspose.Imaging for Python via .NET API, который представляет собой многофункциональный, мощный и простой в использовании API для обработки и преобразования изображений для платформы Python. Вы можете установить его, используя следующую команду из вашей системной командной консоли:

Системная командная строка

>> pip install aspose-imaging-python-net

Действия по изменению фона в EMF с помощью Python

Вам понадобится aspose-imaging-python-net , чтобы попробовать следующий рабочий процесс в вашей собственной среде.

  • загрузите файлы EMF с помощью метода Image.Load;
  • смените фон изображения;
  • сохраните изображения на диск в поддерживаемом Aspose.Imaging формате.

Системные Требования

Aspose.Imaging для Python поддерживается во всех основных операционных системах. Просто убедитесь, что у вас есть следующие предпосылки:

  • Microsoft Windows/Linux с .NET Core Runtime.
  • Менеджер пакетов Python и PyPi.
 

Изменить фон в изображениях EMF - Python

from aspose.imaging import Image, RasterImage, Point, Rectangle, Color
from aspose.imaging.fileformats.png import PngColorType
from aspose.imaging.imageoptions import PngOptions
from aspose.imaging.masking import *
from aspose.imaging.masking.options import *
from aspose.imaging.masking.result import *
from aspose.imaging.sources import FileCreateSource
from aspose.pycore import as_of
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 remove_background_processing_with_manual_rectangles():
raster_formats = [
"jpg",
"png",
"bmp",
"apng",
"dicom",
"jp2",
"j2k",
"tga",
"webp",
"tif",
"gif",
"ico"
]
vector_formats = [
"svg",
"otg",
"odg",
"wmf",
"emf",
"wmz",
"emz",
"cmx",
"cdr"
]
all_formats: list = []
all_formats.extend(raster_formats)
all_formats.extend(vector_formats)
for format_ext in all_formats:
input_file = os.path.join(templates_folder, f"couple.{format_ext}")
if not os.path.exists(input_file):
continue
is_vector_format = format_ext in vector_formats
# Need to rasterize vector formats before background remove
if is_vector_format:
input_file = rasterize_vector_image(format_ext, input_file)
output_file = os.path.join(templates_folder, f"remove_background_manual_rectangles.{format_ext}.png")
print(f"Processing {format_ext}")
with as_of(Image.load(input_file), RasterImage) as image:
obj_init3 = AutoMaskingArgs()
obj_init3.objects_rectangles = [Rectangle(87, 47, 123, 308), Rectangle(180, 24, 126, 224)]
obj_init4 = PngOptions()
obj_init4.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
obj_init4.source = FileCreateSource(output_file, False)
obj_init5 = AutoMaskingGraphCutOptions()
obj_init5.feathering_radius = 2
obj_init5.method = SegmentationMethod.GRAPH_CUT
obj_init5.args = obj_init3
obj_init5.export_options = obj_init4
masking_options = obj_init5
with ImageMasking(image).create_session(masking_options) as masking_session:
# first run of segmentation
with masking_session.decompose() as _:
pass
args_with_user_markers = AutoMaskingArgs()
obj_init_list = [
# background markers
None,
# foreground markers
UserMarker()
# boy's head
.add_point(218, 48, 10)
# girl's head
.add_point(399, 66, 10)
# girs's body
.add_point(158, 141, 10)
.add_point(158, 209, 20)
.add_point(115, 225, 5)
.get_points()]
args_with_user_markers.objects_points = obj_init_list
with masking_session.improve_decomposition(args_with_user_markers) as masking_result:
with masking_result[1].get_image() as result_image:
result_image.save()
if delete_output:
os.remove(output_file)
# Remove rasterized vector image
if is_vector_format and delete_output:
os.remove(input_file)
def remove_background_auto_processing_with_assumed_objects():
raster_formats = [
"jpg",
"png",
"bmp",
"apng",
"dicom",
"jp2",
"j2k",
"tga",
"webp",
"tif",
"gif"]
vector_formats = [
"svg",
"otg",
"odg",
"eps",
"wmf",
"emf",
"wmz",
"emz",
"cmx",
"cdr"]
all_formats = []
all_formats.extend(raster_formats)
all_formats.extend(vector_formats)
for format_ext in all_formats:
input_file = os.path.join(templates_folder, f"couple.{format_ext}")
if not os.path.exists(input_file):
continue
is_vector_format = format_ext in vector_formats
# Need to rasterize vector formats before background remove
if is_vector_format:
input_file = rasterize_vector_image(format_ext, input_file)
output_file = os.path.join(templates_folder,
f"remove_background_auto_assumed_objects.{format_ext}.png")
print(f"Processing {format_ext}")
with as_of(Image.load(input_file), RasterImage) as image:
obj_init9 = list()
obj_init9.append(AssumedObjectData(DetectedObjectType.HUMAN, Rectangle(87, 47, 123, 308)))
obj_init9.append(AssumedObjectData(DetectedObjectType.HUMAN, Rectangle(180, 24, 126, 224)))
obj_init10 = PngOptions()
obj_init10.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
obj_init10.source = FileCreateSource(output_file, False)
obj_init11 = AutoMaskingGraphCutOptions()
obj_init11.assumed_objects = obj_init9
obj_init11.calculate_default_strokes = True
obj_init11.feathering_radius = 1
obj_init11.method = SegmentationMethod.GRAPH_CUT
obj_init11.export_options = obj_init10
obj_init11.background_replacement_color = Color.green
masking_options = obj_init11
with ImageMasking(image).decompose(masking_options) as masking_result:
with masking_result[1].get_image() as result_image:
result_image.save()
# Remove rasterized vector image
if is_vector_format and delete_output:
os.remove(input_file)
if delete_output:
os.remove(output_file)
def remove_background_auto_processing():
raster_formats = [
"jpg",
"png",
"bmp",
"apng",
"dicom",
"jp2",
"j2k",
"tga",
"webp",
"tif",
"gif"]
vector_formats = [
"svg",
"otg",
"odg",
"eps",
"wmf",
"emf",
"wmz",
"emz",
"cmx",
"cdr"]
all_formats: list = []
all_formats.extend(raster_formats)
all_formats.extend(vector_formats)
for format_ext in all_formats:
input_file = os.path.join(templates_folder, f"couple.{format_ext}")
if not os.path.exists(input_file):
continue
is_vector_format = format_ext in vector_formats
# Need to rasterize vector formats before background remove
if is_vector_format:
input_file = rasterize_vector_image(format_ext, input_file)
output_file = os.path.join(templates_folder, f"remove_background_auto.{format_ext}.png")
print(f"Processing {format_ext}")
with as_of(Image.load(input_file), RasterImage) as image:
obj_init14 = PngOptions()
obj_init14.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
obj_init14.source = FileCreateSource(output_file, False)
obj_init15 = AutoMaskingGraphCutOptions()
obj_init15.feathering_radius = 1
obj_init15.method = SegmentationMethod.GRAPH_CUT
obj_init15.export_options = obj_init14
obj_init15.background_replacement_color = Color.green
masking_options = obj_init15
with ImageMasking(image).decompose(masking_options) as masking_result:
with masking_result[1].get_image() as result_image:
result_image.save()
# Remove rasterized vector image
if is_vector_format and delete_output:
os.remove(input_file)
if delete_output:
os.remove(output_file)
def remove_background_generic_example():
raster_formats = [
"jpg",
"png",
"bmp",
"apng",
"dicom",
"jp2",
"j2k",
"tga",
"webp",
"tif",
"gif"]
vector_formats = [
"svg",
"otg",
"odg",
"wmf",
"emf",
"wmz",
"emz",
"cmx",
"cdr"]
all_formats: list = []
all_formats.extend(raster_formats)
all_formats.extend(vector_formats)
for format_ext in all_formats:
input_file = os.path.join(templates_folder, f"couple.{format_ext}")
if not os.path.exists(input_file):
continue
is_vector_format: bool = format_ext in vector_formats
# Need to rasterize vector formats before background remove
if is_vector_format:
input_file = rasterize_vector_image(format_ext, input_file)
output_file = os.path.join(templates_folder, f"remove_background.{format_ext}.png")
print(f"Processing {format_ext}")
with as_of(Image.load(input_file), RasterImage) as image:
obj_init18 = PngOptions()
obj_init18.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
obj_init18.source = FileCreateSource(output_file, False)
obj_init19 = AutoMaskingGraphCutOptions()
obj_init19.calculate_default_strokes = True
obj_init19.feathering_radius = 1
obj_init19.method = SegmentationMethod.GRAPH_CUT
obj_init19.export_options = obj_init18
obj_init19.background_replacement_color = Color.green
masking_options = obj_init19
with ImageMasking(image).decompose(masking_options) as masking_result:
with masking_result[1].get_image() as result_image:
result_image.save()
# Remove rasterized vector image
if is_vector_format and delete_output:
os.remove(input_file)
if delete_output:
os.remove(output_file)
def rasterize_vector_image(format_ext, input_file):
output_file: str = 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
class UserMarker:
def __init__(self):
self._list: list = []
def add_point(self, left, top, radius):
for y in range(top - radius, top + radius + 1):
for x in range(left - radius, left + radius + 1):
self._list.append(Point(x, y))
return self
def get_points(self):
return self._list
# Run examples
remove_background_auto_processing_with_assumed_objects()
remove_background_processing_with_manual_rectangles()
remove_background_auto_processing()
remove_background_generic_example()
 
  • Об Aspose.Imaging for Python API

    Aspose.Imaging API — это решение для обработки изображений, позволяющее создавать, изменять, рисовать или конвертировать изображения и фотографии в приложениях. Он предлагает: кросс-платформенную обработку изображений, включая, помимо прочего, преобразования между различными форматами изображений (включая единую многостраничную или многокадровую обработку изображений), модификации, такие как рисование, работа с графическими примитивами, преобразования (изменение размера, обрезка, отражение и поворот), бинаризация, оттенки серого, настройка яркости, контрастности, расширенные функции обработки изображений (фильтрация, дизеринг, маскирование, устранение перекоса) и стратегии оптимизации памяти. Это автономная библиотека, которая не зависит от какого-либо программного обеспечения для операций с изображениями. Можно легко добавить в проекты высокопроизводительные функции преобразования изображений с помощью собственных API. Это 100% частные локальные API, а изображения обрабатываются на ваших серверах.

    Изменить фон в EMF с помощью онлайн-приложения

    Измените фон в документах EMF, посетив наш веб-сайт Live Demos Online примеры имеют следующие преимущества

      Не нужно ничего скачивать или настраивать
      Нет необходимости писать какой-либо код
      Просто загрузите файлы EMF и нажмите кнопку «Изменить фон сейчас»
      Мгновенно получить ссылку для скачивания результирующего файла

    EMF Чем является EMF формат

    Расширенный формат метафайла (EMF) хранит графические изображения независимо от устройства. Метафайлы EMF состоят из записей переменной длины в хронологическом порядке, которые могут отображать сохраненное изображение после анализа на любом устройстве вывода. Эти записи переменной длины могут быть определениями вложенных объектов, команд для рисования и графических свойств, важных для точного воспроизведения изображения. Когда устройство открывает метафайл EMF, используя собственную графическую среду, пропорции, размеры, цвета и другие графические свойства исходного изображения остаются неизменными независимо от платформы открывающего устройства.

    Читать далее

    Другие поддерживаемые форматы изменения фона

    С помощью Python можно легко изменить фон в разных форматах, в том числе:

    APNG (Анимированная портативная сетевая графика)
    BMP (Растровое изображение)
    ICO (Значок Windows)
    JPG (Объединенная группа экспертов по фотографии)
    DIB (Независимое от устройства растровое изображение)
    DICOM (Цифровая визуализация и связь)
    DJVU (Графический формат)
    DNG (Изображение цифровой камеры)
    EMZ (Сжатый расширенный метафайл Windows)
    GIF (Графический формат обмена)
    JP2 (JPEG 2000)
    J2K (Сжатое изображение вейвлета)
    PNG (Портативная сетевая графика)
    TIFF (Формат изображения с тегами)
    WEBP (Растровое веб-изображение)
    WMF (Метафайл Microsoft Windows)
    WMZ (Сжатая оболочка проигрывателя Windows Media)
    TGA (Тарга Графика)
    SVG (Масштабируемая векторная графика)
    EPS (Инкапсулированный язык PostScript)
    CDR (Векторный рисунок изображения)
    CMX (Обмен изображениями Corel)
    OTG (Стандарт OpenDocument)
    ODG (Формат отрисовки Apache OpenOffice)