Merging Perspective Corrected Image With Transparent Background Template Image Using Pillow [pil, Python]
Solution 1:
You don't really need to write any Python, you can just do it in the Terminal with ImageMagick using a "Perspective Transform" like this:
magick cover.png -virtual-pixel none -distort perspective "0,0 96,89 %w,0 325,63 %w,%h 326,522 0,%h 96,491" template.png +swap -flatten result.png
Looking at the parameters to the perspective transform, you can hopefully see there are 4 pairs of coordinates, one pair for each corner of the transform showing how the source location gets mapped in the output image.
So, the top-left corner of the cover (0,0) gets mapped to the top-left of the empty area in the template (96,89). The top right of the cover (width,0) gets mapped to the top-right of the empty area of the template (325,63). The bottom-right of the cover (width,height) gets mapped to the bottom-right of the empty area on the template (326,522). The bottom-left of the cover (0,height) gets mapped to the bottom-left corner of the empty area of the template (96,491).
If you are using the old v6 ImageMagick, replace magick
with convert
.
Note that, if you really want to do it in Python, there is a Python binding called wand
here. I am not very experienced with wand
but this seems to be equivalent:
#!/usr/bin/env python3from itertools import chain
from wand.color import Color
from wand.image import Image
with Image(filename='cover.png') as cover, Image(filename='template.png') as template:
w, h = cover.size
cover.virtual_pixel = 'transparent'
source_points = (
(0, 0),
(w, 0),
(w, h),
(0, h)
)
destination_points = (
(96, 89),
(325, 63),
(326, 522),
(96, 491)
)
order = chain.from_iterable(zip(source_points, destination_points))
arguments = list(chain.from_iterable(order))
cover.distort('perspective', arguments)
# Overlay cover onto template and save
template.composite(cover,left=0,top=0)
template.save(filename='result.png')
Keywords: Python, ImageMagick, wand, image processing, perspective transform, distort.
Post a Comment for "Merging Perspective Corrected Image With Transparent Background Template Image Using Pillow [pil, Python]"