`
panboxian_2008
  • 浏览: 5343 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

利用PIL剪切出正方形图片

阅读更多

 

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完成了。
代码如下:
import Image
from Image import EXTENT

if img.size[0]>img.size[1]:
    offset=int(img.size[0]-img.size[1])/2
    img=img.transform((img.size[1],img.size[1]),EXTENT,(offset,0,int(img.size[0]-offset),img.size[1]))
else:
    offset=int(img.size[1]-img.size[0])/2
    img=img.transform((img.size[0],img.size[0]),EXTENT,(0,offset,img.size[0],(img.size[1]-offset)))
img.thumbnail((300, 300))
 这篇随笔 是《Django&JQuery手动剪切个性头像》的后续. 

 

分享到:
评论
3 楼 linychuo 2010-04-13  
PIL能不能剪切出圆形图片?
2 楼 panboxian_2008 2010-03-27  
oldJ 写道
裁剪图片用crop方法似乎更方便一些?

img2 = img.crop(x1, y1, x2, y2)

这个函数来得更简便一些。最初的想法是想找一个函数,直接指定图片的宽度和高度,等比例剪切的,结果没有找到,只能使用计算的土办法,再随手使用了transform函数,有了crop以后,就不用传入 宽度和高度了,感觉他们有点多余了。
不知道有没有我上面说的函数。指定宽高,直接等比例剪切(不留黑边的)。
1 楼 oldJ 2010-03-26  
裁剪图片用crop方法似乎更方便一些?

img2 = img.crop(x1, y1, x2, y2)

相关推荐

    python使用PIL剪切和拼接图片

    剪切图片需要确定四个坐标参数——左上角的x、y坐标和右下角的x、y坐标,这四个值构成了一个四元组 `(left, top, right, bottom)`。 5. **使用`crop()`方法**: 使用`crop()`方法对图片进行剪切,传入四元组作为...

    图片剪切,剪切图片

    5. **分辨率与质量**:剪切图片时,要关注分辨率的保持,以确保图像在放大后仍保持清晰。同时,剪切过程可能导致像素损失,选择无损剪切或适当调整质量设置可以减少这种影响。 6. **对齐与定位**:精确的裁剪需要...

    基于Pil库的简易图片编辑

    本教程将介绍如何利用PIL库进行简单的图片编辑,帮助你熟悉这个库的基础用法。 1. PIL库介绍: PIL库全称为Python Imaging Library,它是Python中的一个图像处理库,支持多种图像文件格式,如JPEG、PNG、BMP、GIF...

    使用Python的PIL模块来进行图片对比

    ### 使用Python的PIL模块进行图片对比 #### 一、引言 在现代互联网应用中,图片搜索是一项非常实用的功能,比如用户上传一张图片后,搜索引擎能够返回与之相似的其他图片。这种技术背后的原理往往是基于图片颜色值...

    python使用PIL库读取图片的像素值

    通过使用 PIL 库,我们可以获取图片的像素值,然后遍历整个图片像素,找出不是透明像素的区域,最后将其截取出来并保存。 PIL 库的使用 PIL 库(Python Imaging Library)是一个功能强大的图像处理库,可以用来...

    PIL库,图片库

    下面是一个简单的PIL库使用示例,展示如何打开一张图片并调整其大小: ```python from PIL import Image # 打开图像 img = Image.open('example.jpg') # 调整图像大小 resized_img = img.resize((800, 600)) # ...

    用SHAP控件剪切指定尺寸图片

    这个函数应该接收矩形的左上角和右下角坐标,然后使用PIL的crop()方法剪切图片。 ```python def onselect(x1, y1, x2, y2): cropped_img = img.crop((x1, y1, x2, y2)) # 可以选择保存或显示剪切后的图片 cropped...

    PIL实现图片合成.7z

    在本案例中,我们将重点讨论如何利用PIL来实现图片合成,特别是针对证件照换背景这一应用场景。 首先,要进行图片合成,我们需要导入PIL库,其主要的类`Image`是处理图像的核心。在Python中,可以通过以下方式导入...

    python图像压缩脚本(内附PIL安装包和处理图片、基于SVD分解和图像重组)

    5. 重构图像:利用保留的奇异值重新构造矩阵,并转换回图像格式。 6. 写入文件:使用PIL的save方法将压缩后的图像保存到文件。 通过调整保留的奇异值数量,我们可以控制压缩比例和图像质量之间的平衡。在实际应用中...

    PIL图像处理模块paste方法简单使用详解

    tmp = im1.crop((0, 0, 500, 500)) # 从img1中剪切出一个500x500的矩形区域 im2.paste(tmp, (300, 300, 800, 800)) # 将剪切出来的区域粘贴到img2的指定位置 im2.save(save_path) ``` **代码解释**: 1. **打开...

    计算机软件-商业源码-实例69 使用剪切板复制图片.zip

    在Python中,我们可以使用`PIL`(Python Imaging Library)库来读取和处理图片,并将其转换为剪切板所需的格式。在C#中,我们可以使用`Image`类的`ToBitmap`方法将图片转换为位图。 接下来,我们将执行以下步骤来...

    PythonPIL模块根据像素大小将图片变成黑白点阵图

    使用到 PIL 模块中的函数: Image.open :打开一张图片,获取 Image 对象。 Image.convert(mode='L') :将图片转为灰度图像 Image.crop :截取图片中的一块区域 Image.paste :将另外一张图片粘贴到当前图片中 Image...

    Python+pyqt5+PIL+批量图像处理.rar

    在本项目中,我们主要探讨的是如何利用Python的PyQt5库构建图形用户界面(GUI),结合PIL(Python Imaging Library)库实现批量图像处理,包括重命名和添加水印的功能。这是一份非常适合初学者的实践教程,因为它...

    python用法PIL缩放网络图片并保存的方法_.docx

    Python 使用 PIL 缩放网络图片并保存的方法 Python 是一种流行的编程语言,Python Imaging Library(PIL)是 Python 的一个图像处理库,能够对图像进行处理和操作。在网络上,我们可以使用 PIL 库来缩放网络图片,...

    pil-handbook.zip_PIL handbook_pil

    1. **图像读取和写入**:PIL支持多种图像格式,如JPEG、PNG、BMP、GIF等,可以方便地读取和保存这些格式的图片。 2. **图像显示**:库内提供了显示图像的功能,便于开发者查看和调试处理结果。 3. **图像操作**:...

    客户端程序自动化测试 图片对象判断-pywinauto获取图片坐标,PIL实现图片对比

    所以需要通过判断图标所在的图片来实现自动化用例中的断言。 解决方案: 首先,需要定位到目标控件的坐标,然后截图,再将截图与期望图片进行比较。 这里主要需要解决的3个点: 获取图片控件坐标 截图 比较图片 经过...

    matlab开发-PIL

    结合Simulink,用户可以创建可视化模型,并利用PIL的功能进行参数识别,这对于工程问题的解决和科学研究非常有价值。通过研究提供的示例、脚本和模型文件,用户可以深入理解PIL的用法和功能,进而高效地应用于自己的...

    python剪切图片简单代码

    python剪切图片,调用PIL库做各种格式的图片的简单剪切

    PIL API 使用守则

    利用该库,可以轻松创建缩略图、转换图像格式、打印图片等。当前版本已能够识别并读取大量图像格式,并且为了满足最常见的交换和展示需求,仅提供了部分常用格式的支持。例如: - 创建缩略图 - 转换格式 - 打印图片...

Global site tag (gtag.js) - Google Analytics