Python PIL按比例裁剪图片


Posted in Python onMay 11, 2022

PIL图片如何按比例裁剪

问题描述

如图片比例为 1:1 裁剪为 4:3

1.jpg

Python PIL按比例裁剪图片

解决方案

from PIL import Image
def image_clip(filename, savename, width_scale, height_scale):
    """图像裁剪
    :param filename: 原图路径
    :param savename: 保存图片路径
    :param width_scale: 宽的比例
    :param height_scale: 高的比例
    """
    image = Image.open(filename)
    (width, height), (_width, _height) = image.size, image.size
    _height = width / width_scale * height_scale
    if _height > height:
        _height = height
        _width = width_scale * height / height_scale
    image.crop((0, 0, _width, _height)).save(savename)  # 左上角
    # image.crop((0, height - _height, _width, height)).save(savename)  # 左下角
    # image.crop((width - _width, 0, width, _height)).save(savename)  # 右上角
    # image.crop((width - _width, height - _height, width, height)).save(savename)  # 右下角
if __name__ == '__main__':
    filename = '1.jpg'
    savename = 'result.jpg'
    image_clip(filename, savename, width_scale=4, height_scale=3)
    # image_clip(filename, savename, width_scale=3, height_scale=4)

效果

Python PIL按比例裁剪图片

PIL调整图片大小

使用 PIL 在图片比例不变的情况下修改图片大小。

介绍

Image.resize

def resize(self, size, resample=BICUBIC, box=None, reducing_gap=None):
    """
    Returns a resized copy of this image.
    返回此图像的大小调整后的副本。
    :param size: The requested size in pixels, as a 2-tuple:
       (width, height).
     param size: 请求的大小(以像素为单位),是一个二元数组:(width, height)
    :param resample: An optional resampling filter.  This can be
       one of :py:attr:`PIL.Image.NEAREST`, :py:attr:`PIL.Image.BOX`,
       :py:attr:`PIL.Image.BILINEAR`, :py:attr:`PIL.Image.HAMMING`,
       :py:attr:`PIL.Image.BICUBIC` or :py:attr:`PIL.Image.LANCZOS`.
       Default filter is :py:attr:`PIL.Image.BICUBIC`.
       If the image has mode "1" or "P", it is
       always set to :py:attr:`PIL.Image.NEAREST`.
       See: :ref:`concept-filters`.
     param resample: 一个可选的重采样过滤器。
    :param box: An optional 4-tuple of floats providing
       the source image region to be scaled.
       The values must be within (0, 0, width, height) rectangle.
       If omitted or None, the entire source is used.
     param box: 可选的4元浮点数,提供要缩放的源映像区域。
    :param reducing_gap: Apply optimization by resizing the image
       in two steps. First, reducing the image by integer times
       using :py:meth:`~PIL.Image.Image.reduce`.
       Second, resizing using regular resampling. The last step
       changes size no less than by ``reducing_gap`` times.
       ``reducing_gap`` may be None (no first step is performed)
       or should be greater than 1.0. The bigger ``reducing_gap``,
       the closer the result to the fair resampling.
       The smaller ``reducing_gap``, the faster resizing.
       With ``reducing_gap`` greater or equal to 3.0, the result is
       indistinguishable from fair resampling in most cases.
       The default value is None (no optimization).
     param reducing_gap: 通过两个步骤调整图像大小来应用优化。
    :returns: An :py:class:`~PIL.Image.Image` object.
     returns: 返回一个 PIL.Image.Image 对象
    """

看代码吧

from PIL import Image
 
 
image = Image.open('图片路径')
 
# 调整图片大小,并保持比例不变
# 给定一个基本宽度
base_width = 50
 
# 基本宽度与原图宽度的比例
w_percent = base_width / float(image.size[0])
 
# 计算比例不变的条件下新图的长度
h_size = int(float(image.size[1]) * float(w_percent))
 
# 重新设置大小
# 默认情况下,PIL使用Image.NEAREST过滤器进行大小调整,从而获得良好的性能,但质量很差。
image = image.resize((base_width, h_size), Image.ANTIALIAS)

Tags in this post...

Python 相关文章推荐
python读取html中指定元素生成excle文件示例
Apr 03 Python
Python中用Spark模块的使用教程
Apr 13 Python
Python中Continue语句的用法的举例详解
May 14 Python
pandas数据分组和聚合操作方法
Apr 11 Python
django静态文件加载的方法
May 20 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
10个Python小技巧你值得拥有
Sep 29 Python
python实现年会抽奖程序
Jan 22 Python
Python基础之函数的定义与使用示例
Mar 23 Python
Python字符串内置函数功能与用法总结
Apr 16 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
python 学习GCN图卷积神经网络
May 11 #Python
Python+Pillow+Pytesseract实现验证码识别
May 11 #Python
Python 绘制多因子柱状图
PyCharm 配置SSH和SFTP连接远程服务器
May 11 #Python
Python 文字识别
May 11 #Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 #Python
Python 匹配文本并在其上一行追加文本
May 11 #Python
You might like
优化使用mysql存储session的php代码
2008/01/10 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
php实现购物车功能(上)
2020/07/23 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
javascript document.execCommand() 常用解析
2009/12/14 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
Python求解平方根的方法
2015/03/11 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
Python Django 命名空间模式的实现
2019/08/09 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
如何基于Python批量下载音乐
2019/11/11 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
组织关系转移介绍信
2014/01/16 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
检讨书范文
2015/01/27 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
小学少先队工作总结2015
2015/05/26 职场文书