用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上

  1. from PIL import ImageFont
  2. from PIL import Image
  3. from PIL import ImageDraw
  4. import math
  5.  
  6. def combine_image_with_transparency(templateImg, pos, input_img):
  7. #新建一张和目标图片同样大小的空白图片,颜色根据实际需要,这里是白色,透明的
  8. tmpImg = Image.open(input_img).convert('RGBA')
  9. pos = [float(point) for point in pos]
  10. center_x, center_y = pos[0], pos[1]
  11. dx = dy = 0
  12. tmpImg_size = tuple(int(x * pos[2]) for x in tmpImg.size)
  13. tmpImg = tmpImg.resize(tmpImg_size)
  14. x = center_x - tmpImg.size[0] / 2
  15. y = center_y - tmpImg.size[1] / 2
  16. w, h = tmpImg.size
  17. r = int(math.ceil(math.sqrt(w * w + h * h)))
  18. # 新建正方形
  19. empty_img = Image.new('RGBA', (r, r),(255, 255, 255, 255))
  20. dx = int((r - w) / 2.0)
  21. dy = int((r - h) / 2.0)
  22. empty_img.paste(tmpImg, (dx, dy))
  23. tmpImg = empty_img.rotate(pos[3])
  24. # 将旋转之后的透明部分填充为白色
  25. fff = Image.new('RGBA', tmpImg.size, (255,) * 4)
  26. tmpImg = Image.composite(tmpImg, fff, tmpImg)
  27. target.paste(tmpImg, (int(x - dx), int((y - dy))), tmpImg)
  28. target.paste(templateImg, (0,0), templateImg)
  29. return target
  30.  
  31. if __name__ == '__main__':
  32. imageFile = Image.open('./1.png').convert("RGBA")
  33. pos = '226,169,0.205,-49'.split(',')
  34. imageFile = combine_image_with_transparency(imageFile, pos, './2.jpg')
  35. imageFile = imageFile.convert("RGB")
  36. imageFile.save('./out.png')

PIL图片合成旋转缩放的更多相关文章

  1. Android -- 图片处理, 画画板,缩放,旋转,平移,镜面,倒影,图片合成,颜色处理

    1. 画画板 示例代码 public class MainActivity extends Activity { private ImageView iv; private Bitmap baseBi ...

  2. pyhton图片合成模块-PIL

    文章链接:https://www.cnblogs.com/lilinwei340/p/6474170.html python PIL实现图片合成   在项目中需要将两张图片合在一起.遇到两种情况,一种 ...

  3. Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)

    惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...

  4. Android图片旋转,缩放,位移,倾斜,对称完整示例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity如下: import android.os.Bundle; import android.view.MotionEvent; import android.view.View; ...

  5. PHP图片加水印文字及图片合成缩放

    <?php //图片添加文字水印 /*$bigImgPath = 'background.png'; $img = imagecreatefromstring(file_get_contents ...

  6. 【Thumbnailator】java 使用Thumbnailator实现等比例缩放图片,旋转图片等【转载】

    Thumbnailator概述:     Thumbnailator是与Java界面流畅的缩略图生成库.它简化了通过提供一个API允许精细的缩略图生成调整生产从现有的图像文件的缩略图和图像对象的过程, ...

  7. Android图片旋转,缩放,位移,倾斜,对称完整演示样例(一)——imageView.setImageMatrix(matrix)和Matrix

    MainActivity例如以下: import android.os.Bundle; import android.view.MotionEvent; import android.view.Vie ...

  8. 【CSS3动画】transform对文字及图片的旋转、缩放、倾斜和移动

    前言:之前我有写过CSS3的transform这一这特性,对于它的用法,还不是很透彻,今天补充补充,呵呵 你懂的,小司机准备开车了. a)再提一提transform的四个属性 ①旋转--->ro ...

  9. ImageCombiner - Java服务端图片合成的工具包,好用!

    自己的第一个也是唯一一个开源项目,因为平时比较懒,很少做宣传,今天刚好突破160个star,发到园子里推荐给大家,算是庆祝一下,哈. 项目地址:https://gitee.com/opensource ...

随机推荐

  1. shell的uniq命令

    uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用. uniq 可检查文本文件中重复出现的行列. 命令语法: uniq [-c/d/D/u/i] [-f Fields ...

  2. 🔺Count on a tree SPOJ - COT (无能为力。。。)

    https://cn.vjudge.net/problem/SPOJ-COT 插上 大佬的代码 和 我的...以后再看吧... Count on a tree 大佬:http://www.cnblog ...

  3. 基于注解的spring mvc 中使用 ajax json 的model

    在 Spring mvc3中,响应.接受 JSON都十分方便. 使用注解@ResponseBody可以将结果(一个包含字符串和JavaBean的Map),转换成JSON. 使用 @RequestBod ...

  4. JAVA实现Excel批量导入

    一.模板下载: 先将模板放在项目WebRoot下的download文件夹下: /** * @Title: downloadFile * @Description: 模板下载 (网络地址) * @par ...

  5. angular 有关侦测组件变化的 ChangeDetectorRef 对象

    我们知道,如果我们绑定了组件数据到视图,例如使用 <p>{{content}}</p>,如果我们在组件中改变了content的值,那么视图也会更新为对应的值. angular ...

  6. socket编程 ------ sockaddr_in 和 sockaddr 的区别

    struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址. // 以下是 IPv4 的定义 struct sockaddr { unsigned s ...

  7. 层级 z-index 透明opacity

    在正常情况下,层级的大小由顺序决定,后面的元素要比前面的元素的层级要高 有定位元素的层级要比没有定位元素层级要高 在都有定位的情况下,层级还是取决于书写顺序 z-index 层级(仅能在定位元素上奏效 ...

  8. OpenCV---模板匹配matchTemplate

    作用有局限性,必须在指定的环境下,才能匹配成功,是受到很多因素的影响,所以有一定的适应性 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是 ...

  9. flex属性设置详解

    CSS代码中常见这样的写法:flex:1 这是flex 的缩写: flex-grow.flex-shrink.flex-basis,其取值可以考虑以下情况: 1. flex 的默认值是以上三个属性值的 ...

  10. 【Web】Struts之namespace

    ZZ:struts2学习:配置篇之namespace 在struts1中是没有命名空间这个概念的,通过命名空间我们可以将所有的action配置划分为一个个逻辑单元,每个单元都有它自己的标识前缀.命名控 ...