PIL图片合成旋转缩放
用PIL实现图片的旋转,缩放,合成
我们需要知道合成位置的中心点坐标,用中心点坐标,不使用左顶点的坐标是由于缩放过程容易计算。
假设A是局部透明的图片,我们希望把B放在A的底部,仅从A的透明部分显示B的部分。
步骤就是,
1、先创建空白的图片C,大小和A目标图片一样大。
2、对B进行缩放到指定大小B0
3、新建空白图片D,宽和高相等,等于B0的对角线长度,目的是防止旋转后丢失部分图像
4、将B0放到D的中间并旋转指定角度得到E。
5、将E合成到C的指定位置
6、将A合成到C上
from PIL import ImageFont
from PIL import Image
from PIL import ImageDraw
import math def combine_image_with_transparency(templateImg, pos, input_img):
#新建一张和目标图片同样大小的空白图片,颜色根据实际需要,这里是白色,透明的
tmpImg = Image.open(input_img).convert('RGBA')
pos = [float(point) for point in pos]
center_x, center_y = pos[0], pos[1]
dx = dy = 0
tmpImg_size = tuple(int(x * pos[2]) for x in tmpImg.size)
tmpImg = tmpImg.resize(tmpImg_size)
x = center_x - tmpImg.size[0] / 2
y = center_y - tmpImg.size[1] / 2
w, h = tmpImg.size
r = int(math.ceil(math.sqrt(w * w + h * h)))
# 新建正方形
empty_img = Image.new('RGBA', (r, r),(255, 255, 255, 255))
dx = int((r - w) / 2.0)
dy = int((r - h) / 2.0)
empty_img.paste(tmpImg, (dx, dy))
tmpImg = empty_img.rotate(pos[3])
# 将旋转之后的透明部分填充为白色
fff = Image.new('RGBA', tmpImg.size, (255,) * 4)
tmpImg = Image.composite(tmpImg, fff, tmpImg)
target.paste(tmpImg, (int(x - dx), int((y - dy))), tmpImg)
target.paste(templateImg, (0,0), templateImg)
return target if __name__ == '__main__':
imageFile = Image.open('./1.png').convert("RGBA")
pos = '226,169,0.205,-49'.split(',')
imageFile = combine_image_with_transparency(imageFile, pos, './2.jpg')
imageFile = imageFile.convert("RGB")
imageFile.save('./out.png')
PIL图片合成旋转缩放的更多相关文章
- Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理
1. 画画板 示例代码 public class MainActivity extends Activity { private ImageView iv; private Bitmap baseBi ...
- pyhton图片合成模块-PIL
文章链接:https://www.cnblogs.com/lilinwei340/p/6474170.html python PIL实现图片合成 在项目中需要将两张图片合在一起.遇到两种情况,一种 ...
- Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)
惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...
- Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix
MainActivity如下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; ...
- PHP图片加水印文字及图片合成缩放
<?php //图片添加文字水印 /*$bigImgPath = 'background.png'; $img = imagecreatefromstring(file_get_contents ...
- 【Thumbnailator】java 使用Thumbnailator实现等比例缩放图片,旋转图片等【转载】
Thumbnailator概述: Thumbnailator是与Java界面流畅的缩略图生成库.它简化了通过提供一个API允许精细的缩略图生成调整生产从现有的图像文件的缩略图和图像对象的过程, ...
- Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix
MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...
- 【CSS3动画】transform对文字及图片的旋转、缩放、倾斜和移动
前言:之前我有写过CSS3的transform这一这特性,对于它的用法,还不是很透彻,今天补充补充,呵呵 你懂的,小司机准备开车了. a)再提一提transform的四个属性 ①旋转--->ro ...
- ImageCombiner - Java服务端图片合成的工具包,好用!
自己的第一个也是唯一一个开源项目,因为平时比较懒,很少做宣传,今天刚好突破160个star,发到园子里推荐给大家,算是庆祝一下,哈. 项目地址:https://gitee.com/opensource ...
随机推荐
- 题解 P1334 【瑞瑞的木板】
声明:本题解已经与其他题解重合, ### 且存在压行情况. 首先,这个题解是我有了惨痛的教训:全部WA... 先发一个CODE做声明: #include <bits/stdc++.h> / ...
- ZOJ3899 State Reversing 【线段树 + NTT】
题目链接 ZOJ3899 题解 比较累,做一道水题 还被卡常= = 我在\(ZOJ\)交过的两道\(NTT\)都被卡常了.. 哦,题意就是求第二类斯特林数,然后线段树维护一下集合数量就可以了 #inc ...
- 【bzoj2893】征服王
Portal -->bzoj2893 Descripiton 给你一个\(n\)个点\(m\)条边的有向图,有一些点是起始点,有一些点是终止点,一次操作可以从一个起始点开始沿着有向图的边走到一个 ...
- 【DP】【CF855C】 Helga Hufflepuff's Cup
Description 给你一个树,可以染 \(m\) 个颜色,定义一个特殊颜色 \(k\) , 要求保证整棵树上特殊颜色的个数不超过 \(x\) 个.同时,如果一个节点是特殊颜色,那么它的相邻节点的 ...
- oracle、mysql、db2三大数据库分页方法的整理
最近项目中经常会涉及到代码中支持三种数据库的分页的功能,自己整理了关于三种数据库的分页的写法,分享给大家,以供大家使用.希望能帮到更多的码友! 先来看一个代码片段: String page = ala ...
- Codeforces 894.C Marco and GCD Sequence
C. Marco and GCD Sequence time limit per test 1 second memory limit per test 256 megabytes input sta ...
- TCP粘包处理
TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务器端)都要有一一成对的socket, 因此,发送端为了将多个 ...
- apk文件签名绕过
声明: 1.本文转载自:http://www.2cto.com/Article/201311/256406.html,为了留作日后参考上传博客 2.如有转载请复试上面连接,尊重原创 apk文件签名绕过 ...
- 「Python」socket指南
开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...
- 解决SQL Server 2008 64位系统无法导入Access/Excel的问题
最近更换了新服务器,操作系统Windows Server 2008 X64,数据库SQL Server 2008 X64,Office 2007(好像只有32位),在存储过程执行OpenDatasou ...