## Imaging Manipulation API
[Product Page](https://products.aspose.com/imaging/python-net/) | [Documentation](https://docs.aspose.com/imaging/python-net/) | [Demos](https://products.aspose.app/imaging/family) | [Blog](https://blog.aspose.com/categories/aspose.imaging-product-family/) | [API Reference](https://reference.aspose.com/imaging/python-net/) | [Search](https://search.aspose.com/) | [Free Support](https://forum.aspose.com/c/imaging) | [Temporary License](https://purchase.aspose.com/temporary-license) | [EULA](https://company.aspose.com/legal/eula)
---
Try our [free online Apps](https://products.aspose.app/imaging/family) demonstrating some of the most popular Aspose.Imaging functionality.
**Aspose.Imaging for Python via .NET** is **Another Python Imaging Library** offering advanced image processing features. You could easily create, load, manipulate, convert, compress images or photos using this API. Also **Aspose.Imaging** library supports drawing and work with graphic primitives. Image export and conversion (including uniform multi-page image processing) is the one of API core features along with image transformations (resize, crop, flip&rotate, binarization, grayscale, adjust, etc.), advanced image manipulation features (filtering, dithering, masking, deskewing) and memory optimization strategies.
**Aspose.Imaging for Python via .NET** is a flexible, stable and powerful API, capable of processing the most commonly used formats along with some special formats such as DjVu, DICOM, WebP & DNG. Moreover, it extends the native support for image formats & processing functions for .NET and .NET Core. **Aspose.Imaging** is cross-platform library, it is Windows x32/x64, Linux x64, and MacOS x64/Arm64 compatible.
> Aspose.Imaging for Python requires you to use python programming language. For Java and .NET languages, we recommend you get Aspose.Imaging for Java and Aspose.Imaging for .NET, respectively.
### Product Features
The following are Aspose.Imaging’s core features:
- Create images (raster, vector)
- Read images (raster, vector)
- Write images (raster, vector)
- **Draw lines, circles, ellipses, texts, complex paths, and images using the classes Graphics, SvgGraphics2D, EmfRecorderGraphics2D, WmfRecorderGraphics2D**
- Process images (including per-pixel modifications)
- Convert between different image formats as raster as vector
- **Support the large images with size more than 100000x100000 pixels**
- **Memory and performance management strategies**
### **Supported File Formats**
|**File format**|**Supported versions**|**Load**|**Save**|
| :- | :- | :- | :- |
|[BMP](https://docs.fileformat.com/image/bmp/)|BMP Specification v5|Yes|Yes|
|[GIF](https://docs.fileformat.com/image/gif/)|Version 89a|Yes|Yes|
|[DICOM](https://docs.fileformat.com/image/dicom/)|Version 3.0|Yes|Yes|
|[DJVU](https://docs.fileformat.com/image/djvu/)|Version 3.0|Yes| |
|[DNG](https://docs.fileformat.com/image/dng/)|Version 1.0.0.0 and later|Yes| |
|[EMF](https://docs.fileformat.com/image/emf/)|Revision 11.0|Yes|Yes|
|[JPEG](https://docs.fileformat.com/image/jpeg/)|CCITT Rec. T.81 (1992 E)|Yes|Yes|
|[JPEG2000](https://docs.fileformat.com/image/jp2/)|ITU-T Rec. T.800 (08/2002 E)|Yes|Yes|
|[ODG](https://docs.fileformat.com/image/odg/)|Version 1.2|Yes| |
|[PNG](https://docs.fileformat.com/image/png/)|Version 1.0 and later|Yes|Yes|
|[ICO](https://docs.fileformat.com/image/ico/)|Version 1.0 and later|Yes|Yes|
|[APNG](https://docs.fileformat.com/image/apng/)| |Yes|Yes|
|[PSD](https://docs.fileformat.com/image/psd/)|Adobe Photoshop 2.0 and later| |Yes|
|[DXF](https://docs.fileformat.com/cad/dxf/)|Dxf 6 and later| |Yes|
|[SVG](https://docs.fileformat.com/page-description-language/svg/)|Version 1.1|Yes|Yes|
|[TIFF](https://docs.fileformat.com/image/tiff/)|Version 6.0*|Yes|Yes|
|[BIG-TIFF](https://www.awaresystems.be/imaging/tiff/bigtiff.html)| |Yes|Yes|
|[DIB](https://docs.fileformat.com/image/dib/)|BMP Specification v5|Yes| |
|[EPS](https://docs.fileformat.com/page-description-language/eps/)| |Yes| |
|[WEBP](https://docs.fileformat.com/image/webp/)| |Yes| |
|[WMF](https://docs.fileformat.com/image/wmf/)|Revision 13.0|Yes|Yes|
|[CDR](https://docs.fileformat.com/image/cdr/)|Version X7, X6 (3-x5 not completely)|Yes| |
|[CMX](https://docs.fileformat.com/image/cmx/)|Version 2.0, 32 bit precision (16 bit precision not completely)|Yes| |
|[OTG](https://docs.fileformat.com/image/otg/)|Version 1.2|Yes| |
|[PDF](https://docs.fileformat.com/pdf/)|Portable document format| |Yes|
|[HTML5 canvas](https://docs.fileformat.com/web/html/)|Html5 canvas element| |Yes|
|[EMZ](https://docs.fileformat.com/image/emz/)|Compressed emf format|Yes|Yes|
|[WMZ](https://docs.fileformat.com/image/wmz/)|Compressed wmf format|Yes|Yes|
|[TGA](https://docs.fileformat.com/image/tga/)|Truevision TGA (TARGA)|Yes|Yes|
|[SVGZ](https://docs.fileformat.com/image/svgz/)|Compressed svg file format|Yes|Yes|
### Platform Independence
Aspose.Imaging for Python can be used to develop applications for a vast range of operating systems, such as Windows (x32/x64), Linux (x64), and MacOS (x64/arm64) where Python 3.5 or later is installed.
**The base .NET platform is .NET Core 6.0**
**Do not use System.Drawing.Common but the platform-independent Aspose.Drawing.**
### Get Started
Ready to give Aspose.Imaging for Python a try?
Simply run ```pip install aspose-imaging-python-net``` from the console to fetch the package. If you already have Aspose.Imaging for Python and want to upgrade the version, please run ```pip install --upgrade aspose-imaging-python-net``` to get the latest version.
You can run the following snippets in your environment to see how Aspose.Imaging works, or check out the [GitHub Repository](https://github.com/aspose-imaging/Aspose.Imaging-for-Python-Net) or [Aspose.Imaging for Python Documentation](https://docs.aspose.com/imaging/python-net/) for other common use cases.
### Create a PNG image from scratch in Python
``` python
from aspose.imaging import Color, Graphics, Pen
from aspose.imaging.fileformats.png import PngImage
# create an empty PNG image
with PngImage(100, 100) as png:
# create a canvas for drawing over the image
g = Graphics(png)
# start a queue of operations which will be processed together as a batch
g.begin_update()
# fill the background with blue color
g.clear(Color.blue)
# draw a line with light green pen with width == 2.0
g.draw_line(Pen(Color.light_green, 2.0), 0, 10, 100, 90)
# execute all drawing operations as one
g.end_update()
# save image in a file
png.save("output.png")
```
### Create and manipulate with PNG image
``` python
from aspose.imaging import Image, ResizeType, Graphics, Color, Pen, Rectangle
from aspose.imaging.fileformats.png import PngImage
from aspose.imaging.imageoptions import PngOptions
from aspose.imaging.sources import FileCreateSource
from aspose.pycore import as_of
import os
data_dir = "~/data-dir"
width = 500
height = 300
path = os.path.join(data_dir, "result.png")
with PngOptions() as options:
options.source = FileCreateSource(path, False)
with as_of(Image.create(options, width, height), PngImage) as image:
graphic = Graphics(image)
graphic.clear(Color.green)
graphic.draw_line(Pen(Color.blue), 9, 9, 90, 90)
new_width = 400
image.resize_width_proportionally(new_width, ResizeType.LANCZOS_RESAMPLE)
area = Rectangle(10, 10, 200, 200)
image.crop(area)
image.save() # save into the file set to options.source
```
### Load, resize and save a raster image
``` python
from aspose.imaging import Image
with Image.load("any-picture.tiff") as image:
image.resize(image.width // 2, image.height // 2)
image.save("output.jpeg")
```
### Load a raster image (PNG) and convert it into jpeg
``` python
from aspose.imaging import Image, FileFormat
from aspose.imaging.fileformats.png import PngImage
import aspose.pycore as pycore
with Image.load("any-picture.png") as image:
print("format: ", FileFormat(image.file_format).name)
# for accessing to a PngImage properties and methods need to cast it
png_image = pycore.as_of(image, PngImage)
print("xmp_data", png_image.xmp_data)
image.save("output.jpeg")
```
### Load jpeg and export it into the different formats
``` python
from aspose.imaging import Image
from aspose.imaging.fileformats.pdf import PdfDocumentInfo
from aspose.imaging.fileformats.tiff.enums import *
from aspose.imaging.imageoptions import *
import os
data_dir = "data-dir"
with Image.load(os.path.join(data_dir, "template.jpg")) as img:
# convert to webp
img.save(os.path.join(data_dir, "output.webp"), WebPOptions())
# convert to psd
img.save(os.path.join(data_dir, "output.psd "), PsdOptions())
# convert to tiff
img.save(os.path.join(data_dir, "output.tiff"), TiffOptions(TiffExpectedFormat.DEFAULT))
# convert to pdf
export_options = PdfOptions()
export_options.pdf_document_info = PdfDocumentInfo()
img.save(os.path.join(data_dir, "output.pdf"), export_options)
```
### Crop image
``` python
from aspose.pycore import as_of
from aspose.imaging import Image, Rectangle, RasterImage
import os
data_dir = "data-dir"
with Image.load(os.path.join(data_dir, "template.jpg")) as img:
# casting to the RasterImage class
raster_image = as_of(img, RasterImage)
# crop
area = Rectangle(10, 10, img.width - 20, img.height - 20)
raster_image.crop(area)
image.save("cropped.jpg")
```
### Merge images into one (collage)
``` python
from aspose.imaging import Image, Graphics, Color, RectangleF
from aspose.imaging.fileformats.png import PngColorType
from aspose.imaging.imageoptions import PngOptions
from aspose.imaging.sources import FileCreateSource
import os
data_dir = "data-dir"
images = []
# files for merging
files = ["template.png", "template.jpg"] # could be more file here
max_width = 0
max_height = 0
total_width = 0
total_height = 0
for file_name in files:
image = Image.load(os.path.join(data_dir, file_name))
total_width += image.width
if image.width > max_width:
max_width = image.width
total_height += image.height
if image.height > max_height:
max_height = image.height
images.append(image)
def merge_images(direction, out_file_name):
target_width = 0
target_height = 0
if direction == 0:
target_width = total_width
target_height = max_height
else:
target_width = max_width
target_height = total_height
output_path = os.path.join(data_dir, out_file_name + ".png")
with PngOptions() as png_options:
png_options.color_type = PngColorType.TRUECOLOR_WITH_ALPHA
with open(out_file_name, "wb") as stream:
png_options.source = FileCreateSource(output_path, False)
with Image.create(png_options, target_width, target_height) as image:
image.background_color = Color.white
graphics = Graphics(image)
x = 0
y = 0
graphics.begin_update()
for frame in images:
print("x", x, "y", y)
graphics.draw_image(frame, RectangleF(x, y, frame.width, frame.height))
if direction == 0:
x += frame.width
if direction == 1:
y += frame.height
graphics.end_update()
image.save(output_path)
# run
merge_images(0, "collage_horizontal")
merge_images(1, "collage_vertical")
for image in images:
# to dispose the image we call __exit__()
with image as _:
pass
```
---
[Product Page](https://products.aspose.com/imaging/python-net/) | [Documentation](https://docs.aspose.com/imaging/python-net/) | [Demos](https://products.aspose.app/imaging/family) | [Blog](https://blog.aspose.com/categories/aspose.imaging-product-family/) | [API Reference](https://reference.aspose.com/imaging/python-net/) | [Search](https://search.aspose.com/) | [Free Support](https://forum.aspose.com/c/imaging) | [Temporary License](https://purchase.aspose.com/temporary-license) | [EULA](https://company.aspose.com/legal/eula)
Raw data
{
"_id": null,
"home_page": "https://products.aspose.com/imaging/python-net",
"name": "aspose-imaging-python-net",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.13,>=3.5",
"maintainer_email": null,
"keywords": "image, convert, manipulate, drawing, load, update, save, merge, crop, resize, flip, rotate, canvas, graphics, jpeg, png, gif, svg, tiff, bigtiff, bmp, dicom, eps, tga, webp, cdr, cmx, djvu, dng, tga, html5, dxf, raster, metafiles, wmf, emf, fodg, ico, pdf, svgz, emz, wmz",
"author": "Aspose",
"author_email": null,
"download_url": null,
"platform": "macos_x86_64",
"description": "## Imaging Manipulation API\n\n[Product Page](https://products.aspose.com/imaging/python-net/) | [Documentation](https://docs.aspose.com/imaging/python-net/) | [Demos](https://products.aspose.app/imaging/family) | [Blog](https://blog.aspose.com/categories/aspose.imaging-product-family/) | [API Reference](https://reference.aspose.com/imaging/python-net/) | [Search](https://search.aspose.com/) | [Free Support](https://forum.aspose.com/c/imaging) | [Temporary License](https://purchase.aspose.com/temporary-license) | [EULA](https://company.aspose.com/legal/eula)\n\n---\nTry our [free online Apps](https://products.aspose.app/imaging/family) demonstrating some of the most popular Aspose.Imaging functionality.\n\n**Aspose.Imaging for Python via .NET** is **Another Python Imaging Library** offering advanced image processing features. You could easily create, load, manipulate, convert, compress images or photos using this API. Also **Aspose.Imaging** library supports drawing and work with graphic primitives. Image export and conversion (including uniform multi-page image processing) is the one of API core features along with image transformations (resize, crop, flip&rotate, binarization, grayscale, adjust, etc.), advanced image manipulation features (filtering, dithering, masking, deskewing) and memory optimization strategies.\n\n**Aspose.Imaging for Python via .NET** is a flexible, stable and powerful API, capable of processing the most commonly used formats along with some special formats such as DjVu, DICOM, WebP & DNG. Moreover, it extends the native support for image formats & processing functions for .NET and .NET Core. **Aspose.Imaging** is cross-platform library, it is Windows x32/x64, Linux x64, and MacOS x64/Arm64 compatible.\n\n> Aspose.Imaging for Python requires you to use python programming language. For Java and .NET languages, we recommend you get Aspose.Imaging for Java and Aspose.Imaging for .NET, respectively.\n\n\n### Product Features\n\nThe following are Aspose.Imaging\u2019s core features:\n- Create images (raster, vector)\n- Read images (raster, vector)\n- Write images (raster, vector)\n- **Draw lines, circles, ellipses, texts, complex paths, and images using the classes Graphics, SvgGraphics2D, EmfRecorderGraphics2D, WmfRecorderGraphics2D**\n- Process images (including per-pixel modifications)\n- Convert between different image formats as raster as vector\n- **Support the large images with size more than 100000x100000 pixels**\n- **Memory and performance management strategies**\n\n### **Supported File Formats**\n|**File format**|**Supported versions**|**Load**|**Save**|\n| :- | :- | :- | :- |\n|[BMP](https://docs.fileformat.com/image/bmp/)|BMP Specification v5|Yes|Yes|\n|[GIF](https://docs.fileformat.com/image/gif/)|Version 89a|Yes|Yes|\n|[DICOM](https://docs.fileformat.com/image/dicom/)|Version 3.0|Yes|Yes|\n|[DJVU](https://docs.fileformat.com/image/djvu/)|Version 3.0|Yes|\u00a0|\n|[DNG](https://docs.fileformat.com/image/dng/)|Version 1.0.0.0 and later|Yes|\u00a0|\n|[EMF](https://docs.fileformat.com/image/emf/)|Revision 11.0|Yes|Yes|\n|[JPEG](https://docs.fileformat.com/image/jpeg/)|CCITT Rec. T.81 (1992 E)|Yes|Yes|\n|[JPEG2000](https://docs.fileformat.com/image/jp2/)|ITU-T Rec. T.800 (08/2002 E)|Yes|Yes|\n|[ODG](https://docs.fileformat.com/image/odg/)|Version 1.2|Yes|\u00a0|\n|[PNG](https://docs.fileformat.com/image/png/)|Version 1.0 and later|Yes|Yes|\n|[ICO](https://docs.fileformat.com/image/ico/)|Version 1.0 and later|Yes|Yes|\n|[APNG](https://docs.fileformat.com/image/apng/)|\u00a0|Yes|Yes|\n|[PSD](https://docs.fileformat.com/image/psd/)|Adobe Photoshop 2.0 and later|\u00a0|Yes|\n|[DXF](https://docs.fileformat.com/cad/dxf/)|Dxf 6 and later|\u00a0|Yes|\n|[SVG](https://docs.fileformat.com/page-description-language/svg/)|Version 1.1|Yes|Yes|\n|[TIFF](https://docs.fileformat.com/image/tiff/)|Version 6.0*|Yes|Yes|\n|[BIG-TIFF](https://www.awaresystems.be/imaging/tiff/bigtiff.html)| |Yes|Yes|\n|[DIB](https://docs.fileformat.com/image/dib/)|BMP Specification v5|Yes|\u00a0|\n|[EPS](https://docs.fileformat.com/page-description-language/eps/)|\u00a0|Yes|\u00a0|\n|[WEBP](https://docs.fileformat.com/image/webp/)|\u00a0|Yes|\u00a0|\n|[WMF](https://docs.fileformat.com/image/wmf/)|Revision 13.0|Yes|Yes|\n|[CDR](https://docs.fileformat.com/image/cdr/)|Version X7, X6 (3-x5 not completely)|Yes|\u00a0|\n|[CMX](https://docs.fileformat.com/image/cmx/)|Version 2.0, 32 bit precision (16 bit precision not completely)|Yes|\u00a0|\n|[OTG](https://docs.fileformat.com/image/otg/)|Version 1.2|Yes|\u00a0|\n|[PDF](https://docs.fileformat.com/pdf/)|Portable document format|\u00a0|Yes|\n|[HTML5 canvas](https://docs.fileformat.com/web/html/)|Html5 canvas element|\u00a0|Yes|\n|[EMZ](https://docs.fileformat.com/image/emz/)|Compressed emf format|Yes|Yes|\n|[WMZ](https://docs.fileformat.com/image/wmz/)|Compressed wmf format|Yes|Yes|\n|[TGA](https://docs.fileformat.com/image/tga/)|Truevision TGA (TARGA)|Yes|Yes|\n|[SVGZ](https://docs.fileformat.com/image/svgz/)|Compressed svg file format|Yes|Yes|\n\n### Platform Independence\n\nAspose.Imaging for Python can be used to develop applications for a vast range of operating systems, such as Windows (x32/x64), Linux (x64), and MacOS (x64/arm64) where Python 3.5 or later is installed.\n\n**The base .NET platform is .NET Core 6.0**\n**Do not use System.Drawing.Common but the platform-independent Aspose.Drawing.**\n\n### Get Started\n\nReady to give Aspose.Imaging for Python a try?\n\nSimply run ```pip install aspose-imaging-python-net``` from the console to fetch the package. If you already have Aspose.Imaging for Python and want to upgrade the version, please run ```pip install --upgrade aspose-imaging-python-net``` to get the latest version.\n\nYou can run the following snippets in your environment to see how Aspose.Imaging works, or check out the [GitHub Repository](https://github.com/aspose-imaging/Aspose.Imaging-for-Python-Net) or [Aspose.Imaging for Python Documentation](https://docs.aspose.com/imaging/python-net/) for other common use cases.\n\n### Create a PNG image from scratch in Python\n``` python\n\nfrom aspose.imaging import Color, Graphics, Pen\nfrom aspose.imaging.fileformats.png import PngImage\n\n# create an empty PNG image\nwith PngImage(100, 100) as png:\n\t# create a canvas for drawing over the image\n\tg = Graphics(png)\n\t# start a queue of operations which will be processed together as a batch\n\tg.begin_update()\n\t# fill the background with blue color\n\tg.clear(Color.blue)\n\t# draw a line with light green pen with width == 2.0\n\tg.draw_line(Pen(Color.light_green, 2.0), 0, 10, 100, 90)\n\t# execute all drawing operations as one\n\tg.end_update()\n\t# save image in a file\n\tpng.save(\"output.png\")\n\t\n```\n\n### Create and manipulate with PNG image\n``` python\n\nfrom aspose.imaging import Image, ResizeType, Graphics, Color, Pen, Rectangle\nfrom aspose.imaging.fileformats.png import PngImage\nfrom aspose.imaging.imageoptions import PngOptions\nfrom aspose.imaging.sources import FileCreateSource\nfrom aspose.pycore import as_of\nimport os\n\ndata_dir = \"~/data-dir\"\nwidth = 500\nheight = 300\npath = os.path.join(data_dir, \"result.png\")\nwith PngOptions() as options:\n\toptions.source = FileCreateSource(path, False)\n\twith as_of(Image.create(options, width, height), PngImage) as image:\n\t\tgraphic = Graphics(image)\n\t\tgraphic.clear(Color.green)\n\t\tgraphic.draw_line(Pen(Color.blue), 9, 9, 90, 90)\n\t\tnew_width = 400\n\t\timage.resize_width_proportionally(new_width, ResizeType.LANCZOS_RESAMPLE)\n\t\tarea = Rectangle(10, 10, 200, 200)\n\t\timage.crop(area)\n\t\timage.save() # save into the file set to options.source\n```\n\n### Load, resize and save a raster image\n``` python\n\nfrom aspose.imaging import Image\n\nwith Image.load(\"any-picture.tiff\") as image:\n\timage.resize(image.width // 2, image.height // 2)\n\timage.save(\"output.jpeg\")\n```\n\n\n### Load a raster image (PNG) and convert it into jpeg\n``` python\n\nfrom aspose.imaging import Image, FileFormat\nfrom aspose.imaging.fileformats.png import PngImage\nimport aspose.pycore as pycore\n\nwith Image.load(\"any-picture.png\") as image:\n\tprint(\"format: \", FileFormat(image.file_format).name)\n\t# for accessing to a PngImage properties and methods need to cast it\n\tpng_image = pycore.as_of(image, PngImage)\n\tprint(\"xmp_data\", png_image.xmp_data)\n\t\n\timage.save(\"output.jpeg\")\n \n```\n\n### Load jpeg and export it into the different formats\n``` python\n\nfrom aspose.imaging import Image\nfrom aspose.imaging.fileformats.pdf import PdfDocumentInfo\nfrom aspose.imaging.fileformats.tiff.enums import *\nfrom aspose.imaging.imageoptions import *\nimport os\n\ndata_dir = \"data-dir\"\nwith Image.load(os.path.join(data_dir, \"template.jpg\")) as img:\n\t# convert to webp\n\timg.save(os.path.join(data_dir, \"output.webp\"), WebPOptions())\n\t# convert to psd\n\timg.save(os.path.join(data_dir, \"output.psd \"), PsdOptions())\n\t# convert to tiff\n\timg.save(os.path.join(data_dir, \"output.tiff\"), TiffOptions(TiffExpectedFormat.DEFAULT))\n\t# convert to pdf\n\texport_options = PdfOptions()\n\texport_options.pdf_document_info = PdfDocumentInfo()\n\timg.save(os.path.join(data_dir, \"output.pdf\"), export_options)\n\n```\n\n### Crop image\n``` python\n\nfrom aspose.pycore import as_of\nfrom aspose.imaging import Image, Rectangle, RasterImage\nimport os\n\ndata_dir = \"data-dir\"\nwith Image.load(os.path.join(data_dir, \"template.jpg\")) as img:\n\t# casting to the RasterImage class\n\traster_image = as_of(img, RasterImage)\n\t# crop\n\tarea = Rectangle(10, 10, img.width - 20, img.height - 20)\n\traster_image.crop(area)\n\timage.save(\"cropped.jpg\")\n```\n\n### Merge images into one (collage)\n``` python\nfrom aspose.imaging import Image, Graphics, Color, RectangleF\nfrom aspose.imaging.fileformats.png import PngColorType\nfrom aspose.imaging.imageoptions import PngOptions\nfrom aspose.imaging.sources import FileCreateSource\nimport os\n\ndata_dir = \"data-dir\"\nimages = []\n# files for merging\nfiles = [\"template.png\", \"template.jpg\"] # could be more file here\nmax_width = 0\nmax_height = 0\ntotal_width = 0\ntotal_height = 0\nfor file_name in files:\n\timage = Image.load(os.path.join(data_dir, file_name))\n\ttotal_width += image.width\n\tif image.width > max_width:\n\t\tmax_width = image.width\n\ttotal_height += image.height\n\tif image.height > max_height:\n\t\tmax_height = image.height\n\timages.append(image)\n\n\ndef merge_images(direction, out_file_name):\n\ttarget_width = 0\n\ttarget_height = 0\n\tif direction == 0:\n\t\ttarget_width = total_width\n\t\ttarget_height = max_height\n\telse:\n\t\ttarget_width = max_width\n\t\ttarget_height = total_height\n\n\toutput_path = os.path.join(data_dir, out_file_name + \".png\")\n\twith PngOptions() as png_options:\n\t\tpng_options.color_type = PngColorType.TRUECOLOR_WITH_ALPHA\n\t\t\n\t\twith open(out_file_name, \"wb\") as stream:\n\t\t\tpng_options.source = FileCreateSource(output_path, False)\n\t\t\twith Image.create(png_options, target_width, target_height) as image:\n\t\t\t\timage.background_color = Color.white\n\t\t\t\tgraphics = Graphics(image)\n\t\t\t\tx = 0\n\t\t\t\ty = 0\n\t\t\t\tgraphics.begin_update()\n\t\t\t\tfor frame in images:\n\t\t\t\t\tprint(\"x\", x, \"y\", y)\n\t\t\t\t\tgraphics.draw_image(frame, RectangleF(x, y, frame.width, frame.height))\n\t\t\t\t\tif direction == 0:\n\t\t\t\t\t\tx += frame.width\n\t\t\t\t\tif direction == 1:\n\t\t\t\t\t\ty += frame.height\n\t\t\t\t\t\t\n\t\t\t\tgraphics.end_update()\n\t\t\t\timage.save(output_path)\n\n\n# run \nmerge_images(0, \"collage_horizontal\")\nmerge_images(1, \"collage_vertical\")\n\nfor image in images:\n\t# to dispose the image we call __exit__()\n\twith image as _:\n\t\tpass\n\n```\n\n---\n[Product Page](https://products.aspose.com/imaging/python-net/) | [Documentation](https://docs.aspose.com/imaging/python-net/) | [Demos](https://products.aspose.app/imaging/family) | [Blog](https://blog.aspose.com/categories/aspose.imaging-product-family/) | [API Reference](https://reference.aspose.com/imaging/python-net/) | [Search](https://search.aspose.com/) | [Free Support](https://forum.aspose.com/c/imaging) | [Temporary License](https://purchase.aspose.com/temporary-license) | [EULA](https://company.aspose.com/legal/eula)\n\n\n",
"bugtrack_url": null,
"license": "Free To Use But Restricted,Other/Proprietary License",
"summary": "Aspose.Imaging for Python via .NET is Another Python Imaging Library. It allows developers to easily create, load, manipulate, convert, compress images or photos using this API.",
"version": "24.11.0",
"project_urls": {
"API Reference": "https://reference.aspose.com/imaging/python-net/",
"Blog": "https://blog.aspose.com/categories/aspose.imaging-product-family/",
"Demos": "https://products.aspose.app/imaging/family",
"Docs": "https://docs.aspose.com/imaging/python-net/",
"Examples": "https://github.com/aspose-imaging/Aspose.Imaging-for-Python-NET",
"Free Support": "https://forum.aspose.com/c/imaging",
"Homepage": "https://products.aspose.com/imaging/python-net",
"Release Notes": "https://releases.aspose.com/imaging/python-net/release-notes/2024/aspose-imaging-for-python-net-24-11-release-notes/",
"Temporary License": "https://purchase.aspose.com/temporary-license"
},
"split_keywords": [
"image",
" convert",
" manipulate",
" drawing",
" load",
" update",
" save",
" merge",
" crop",
" resize",
" flip",
" rotate",
" canvas",
" graphics",
" jpeg",
" png",
" gif",
" svg",
" tiff",
" bigtiff",
" bmp",
" dicom",
" eps",
" tga",
" webp",
" cdr",
" cmx",
" djvu",
" dng",
" tga",
" html5",
" dxf",
" raster",
" metafiles",
" wmf",
" emf",
" fodg",
" ico",
" pdf",
" svgz",
" emz",
" wmz"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ad625240e0ea9ccdecf03ea3bb8477eedacee9a3ff5f444b033302e76b2e84e3",
"md5": "205406b0bcfabad78b8526fe11a87eee",
"sha256": "27fd5522bde042390b15e1a01614c7443840dfd436961c5a24f2e136e6504cc5"
},
"downloads": -1,
"filename": "aspose_imaging_python_net-24.11.0-py3-none-macosx_10_14_x86_64.whl",
"has_sig": false,
"md5_digest": "205406b0bcfabad78b8526fe11a87eee",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.5",
"size": 87062529,
"upload_time": "2024-11-01T17:00:10",
"upload_time_iso_8601": "2024-11-01T17:00:10.232823Z",
"url": "https://files.pythonhosted.org/packages/ad/62/5240e0ea9ccdecf03ea3bb8477eedacee9a3ff5f444b033302e76b2e84e3/aspose_imaging_python_net-24.11.0-py3-none-macosx_10_14_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6d38b187876eccd1043c7c9aa6be57eddc4c20d52aab9ea2661a280b8bc926b4",
"md5": "70d0afd6dc178b222e462f0ed3fcd8e2",
"sha256": "5eebd8133b79c5867191b8777536f92724a0a74d5d68d07a0e220d0efa5a1ace"
},
"downloads": -1,
"filename": "aspose_imaging_python_net-24.11.0-py3-none-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "70d0afd6dc178b222e462f0ed3fcd8e2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.5",
"size": 62656993,
"upload_time": "2024-11-01T17:03:01",
"upload_time_iso_8601": "2024-11-01T17:03:01.912157Z",
"url": "https://files.pythonhosted.org/packages/6d/38/b187876eccd1043c7c9aa6be57eddc4c20d52aab9ea2661a280b8bc926b4/aspose_imaging_python_net-24.11.0-py3-none-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b8dc585230dde185167384ddf2e7cd47073f3ef3ad005b4b7e2f40e09307ccaf",
"md5": "354cb034cf7920abd8e16c855141cd46",
"sha256": "8dc7ec053152a8dffde10b4b94635504a2d763580198942d5c51a6e50c702c23"
},
"downloads": -1,
"filename": "aspose_imaging_python_net-24.11.0-py3-none-win32.whl",
"has_sig": false,
"md5_digest": "354cb034cf7920abd8e16c855141cd46",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.5",
"size": 59083485,
"upload_time": "2024-11-01T17:05:36",
"upload_time_iso_8601": "2024-11-01T17:05:36.862243Z",
"url": "https://files.pythonhosted.org/packages/b8/dc/585230dde185167384ddf2e7cd47073f3ef3ad005b4b7e2f40e09307ccaf/aspose_imaging_python_net-24.11.0-py3-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "596914e5491d9d636f5158df20b09e00ff86b513ecc7f4accde941553faf19cc",
"md5": "abe97c105868c5a646059d71431be710",
"sha256": "9df7c1b8e4e85e3c09fcff06f6ebf3c701c4b56c9e96d036d8d4ec1a7027304a"
},
"downloads": -1,
"filename": "aspose_imaging_python_net-24.11.0-py3-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "abe97c105868c5a646059d71431be710",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<3.13,>=3.5",
"size": 68393720,
"upload_time": "2024-11-01T17:08:33",
"upload_time_iso_8601": "2024-11-01T17:08:33.934770Z",
"url": "https://files.pythonhosted.org/packages/59/69/14e5491d9d636f5158df20b09e00ff86b513ecc7f4accde941553faf19cc/aspose_imaging_python_net-24.11.0-py3-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-01 17:00:10",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "aspose-imaging",
"github_project": "Aspose.Imaging-for-Python-NET",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "aspose-imaging-python-net"
}