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 ...
随机推荐
- BZOJ4915 简单的数字题
不妨设a1<a2<a3<a4.显然第一问的答案是4,满足a1+a4=a2+a3,a1+a2|a3+a4,a1+a3|a2+a4.容易发现将其同时扩大k倍是仍然满足条件的,于是考虑gc ...
- [codeforces464D]World of Darkraft - 2 概率期望
D. World of Darkraft - 2 time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Quartz-作业调度框架
简介 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Quartz 允许开发人员根据时间间隔(或天)来调度作业.它实现了作业和触发器的多对多关系,还 ...
- Linux内核设计与实现第六周读书笔记
第三章 进程管理 3.1 进程 进程是处于执行期的代码.通常进程还要包含其他资源,像打开的文件.挂起的信号.内核的内部数据.处理器状态.一个或多个具有内存映射的内存地址空间及一个或多个执行线程,当然还 ...
- HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...
- scala(三)
一.面向对象编程——类 1.定义一个简单的类 class HelloWorld { private var name = "leo" def sayHello() { print( ...
- 清除localstorage
h5本地存储localStorage,sessionStorage. localStorage是没有失效时间的,sessionStorage的声明周期是浏览器的生命周期. 当浏览器关闭时,sessio ...
- 堡垒机初识--paramiko模块
一.paramiko模块 Python的paramiko模块基于SSH用于连接远程服务器并执行相关的操作. 1.1 在windows上安装paramiko模块 测试环境: win10 , python ...
- Linux 下 JDK + Eclipse + PyDev 安装与配置
一:JDK / JRE 环境 Eclipse 是运行于Java虚拟机中的,所以必须先安装Java环境才能进行开发测试.JRE(Java Runtime Environment)是运行环境,JDK(Ja ...
- 关于java 获取 html select标签 下拉框 option 文本内容 隐藏域
在HTML中从多选下拉框中提取已选中选项的文本内容到后台,被这个问题难倒了. demo.jsp文件 <select id="selecttype" name"typ ...