python PIL 或者Django 如何将任意大小的图片裁剪成正方形而不产生挤压

这个名字到底好不好 2014-09-21 02:40:44
如题所示,实验了很多办法还是不行,想知道比如instagram这个软件,用户上传的图片的大小,尺寸都不一致,但是最后显示的图片总是一个尺寸,还有例如搜索intagram网页版那个网站上的图片都是一个尺寸,但是用户上传的图片绝不是那个尺寸。想知道该怎样才能实现这种功能。
试过bootstrap的缩略图 但是还是会产生挤压,试过PIL裁剪,效果不好。
想要图片不受挤压只能按比例缩小,但是不可能能缩小成一个正方形,求教大神有什么办法可以做到。
...全文
583 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
业余草 2014-09-23
  • 打赏
  • 举报
回复
看看这个帖子:http://www.iteye.com/topic/622108
业余草 2014-09-23
  • 打赏
  • 举报
回复
PIL图形库很多有用的函数,做网站用的比较多的要数剪切图片了,平时都是用thumbnail函数来完成,它能满足我的大部分需求,但也有时并不是我们需要的,比如一张1024*768像素的大图,你想剪切成为300*300像素的小图,这时你用thumbnail剪切出来的小图宽度是300像素了,但小图的高度也跟着等比例缩小,变成了225像素。 有没有相关的函数,可以满足我们的需求呢?有,那就是transform函数,transform函数可以传入剪切图片的尺寸size(宽高),一个方法method(EXTENT)和剪切区域data的起始点和结束点,返回的是image。完整的定义如: im.transform(size, method, data) => image 有了这个函数,我们就可以考虑我们刚才的需求了。关键很是剪切的区域。 思路大致为: 选择剪切区域之前,我们就考虑,一个长方形的图片,剪切成正方形,肯定要舍些东西,把多余的部分去掉。既然图片宽度比高度大,我们就把图片左右两边剪切点,剩下来的这就是我们的选择区域了。接下来就开始求多余的部分的数值了。 首先先比较图片的 宽度和高度,比如图片是img,img.size我们就得到它的宽w和高h了。 w=img.size[0] h=img.size[1],img宽度比高度多出了w-h个像素。那么方案自然就出来了,从大图的左边开始,垂直剪切(w-h)/2个像素,再从右开始垂直剪切(w-h)/2个像素便得出一个768像素的正方形小图来了。再用thumbnail剪切成需要的尺寸300,OK完成了。

39,084

社区成员

发帖
与我相关
我的任务
社区描述
HTML5是构建Web内容的一种语言描述方式。HTML5是互联网的下一代标准,是构建以及呈现互联网内容的一种语言方式.被认为是互联网的核心技术之一。
社区管理员
  • HTML5社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧