将图像大小调整到给定边界区域的最简单方法是什么?

2023-12-08

我想创建一个函数,例如:

def generateThumbnail(self, width, height):
     """
     Generates thumbnails for an image
     """
     im = Image.open(self._file)
     im.thumbnail((width, height), Image.ANTIALIAS)
     im.save(self._path + str(width) + 'x' + 
             str(height) + '-' + self._filename, "JPEG")

可以在其中指定文件并调整其大小。

当前的功能运行良好,但在必要时不会裁剪。

如果给定矩形图像,并且需要调整正方形大小(宽度=高度),则必须进行一些中心加权裁剪。


在调整图像大小之前,您需要正确裁剪图像。基本思想是确定源图像的最大矩形区域,其与缩略图具有相同的宽高比(宽度与高度),然后在调整大小到缩略图的尺寸之前修剪掉(裁剪)其周围的任何多余部分。这是一个计算此类裁剪区域的大小和位置的函数:

def cropbbox(imagewidth,imageheight, thumbwidth,thumbheight):
    """ cropbbox(imagewidth,imageheight, thumbwidth,thumbheight)

        Compute a centered image crop area for making thumbnail images.
          imagewidth,imageheight are source image dimensions
          thumbwidth,thumbheight are thumbnail image dimensions

        Returns bounding box pixel coordinates of the cropping area
        in this order (left,upper, right,lower).
    """
    # determine scale factor
    fx = float(imagewidth)/thumbwidth
    fy = float(imageheight)/thumbheight
    f = fx if fx < fy else fy

    # calculate size of crop area
    cropheight,cropwidth = int(thumbheight*f),int(thumbwidth*f)

    # for centering use half the size difference of the image and the crop area
    dx = (imagewidth-cropwidth)/2
    dy = (imageheight-cropheight)/2

    # return bounding box of centered crop area on source image
    return dx,dy, cropwidth+dx,cropheight+dy


if __name__=='__main__':

    print("===")
    bbox = cropbbox(1024,768, 128,128)
    print("cropbbox(1024,768, 128,128): {}".format(bbox))

    print("===")
    bbox = cropbbox(768,1024, 128,128)
    print("cropbbox(768,1024, 128,128): {}".format(bbox))

    print("===")
    bbox = cropbbox(1024,1024, 96,128)
    print("cropbbox(1024,1024, 96,128): {}".format(bbox))

    print("===")
    bbox = cropbbox(1024,1024, 128,96)
    print("cropbbox(1024,1024, 128,96): {}".format(bbox))

确定作物面积后,调用im.crop(bbox)然后打电话im.thumbnail(...)在返回的图像上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将图像大小调整到给定边界区域的最简单方法是什么? 的相关文章

  • 在 Python 2.5 中,如何终止子进程?

    我正在使用 Python 中的 subprocess 包来运行子进程 稍后需要将其终止 然而 subprocess 包的文档指出 terminate 函数仅从 2 6 开始可用 我们运行的是 Linux 2 5 出于向后兼容性的原因 我无法
  • 在 Matplotlib 中将文本旋转到对数刻度线上

    Problem 我正在处理对数刻度的数据 并希望旋转它以适合一条线 我知道模型 但不确定我应该插入哪个角度transform angles以恢复正确的旋转 经过一番尝试和错误后 我知道对于我需要的轴限制 答案是 10 度左右 MWE imp
  • matplotlib改变jpg图像颜色

    我正在使用 matplotlib imread 函数从文件系统读取图像 但是 当显示 jpg 图像时 它会更改这些图像的颜色 Python 3 5 Anaconda3 4 3 matplotlib2 0 reading 5 color im
  • 如何在不使用外部库(如Numpy、Pandas)的情况下读取CSV文件?

    这是面试中经常出现的问题 我知道如何使用读取 csv 文件Pandas 然而 我正在努力寻找一种在不使用外部库的情况下读取文件的方法 Python 是否带有任何可以帮助读取 csv 文件的模块 你最有可能将需要用于读取 CSV 文件的库 虽
  • Python3.7 rasterio库打不开jp2

    我想从 Sentinel2 打开 jp2 图像 但是当我读取图像时 band rasterio open imagetest driver JP2OpenJPEG 我收到下一个错误 D DataStorage 00 sentinel dat
  • Python 解析 XML 提要错误:XPathEvalError:未定义的命名空间前缀

    我正在尝试处理 XML 文件 但收到此错误 XPathEvalError Undefined namespace prefix 在这一行中 print category item xpath g google product categor
  • django 删除模板中的硬编码 URL

    我知道在模板文件中我可以包含此代码 它将返回链接列表 for q in all ul li a href q question text a li ul endfor 现在 django 将搜索名称 detail in the urls p
  • 通过文档测试、覆盖率和并行性进行 Python 测试发现

    还有一匹小马 不 说真的 我正在寻找一种组织 有效 测试的方法 大多数事情确实有效 但并非所有部分都能组合在一起 这就是我想要的 自动发现测试 这包括文档测试 请注意 文档测试的总和不得显示为单个测试 即不是 py test doctest
  • Fig.add_subplot() *transform* 不起作用?

    关于帖子在 matplotlib 的子图中嵌入小图 https stackoverflow com questions 17458580 embedding small plots inside subplots in matplotlib
  • 为什么静态绑定对于类和函数的工作方式不同?

    在 python 中 在 2 7 6 上测试 所有变量都是 在编译时静态绑定到范围 这个过程很好 描述于http www python org dev peps pep 0227 http www python org dev peps p
  • 安装了tensorflow,但pycharm忽略它

    我安装了tensorflow 约书亚的回答 如何在anaconda python 3 6上安装tensorflow https stackoverflow com questions 43419795 how to install tens
  • 如何取消选择单选按钮 tkinter

    我看过几个在线教程 它们似乎都不能正常工作 我需要在单击清除按钮后取消选择单选按钮 deselect 方法不执行任何操作 清除文本和输入框工作正常 请协助 谢谢你 from tkinter import class Example Fram
  • schematron 报告 python lxml 问题

    我正在使用 lxml schematron 模块验证 xml 文档 它运行良好 但我无法显示设置为属性的验证报告 我找不到如何将其作为 XML 树进行处理 这是我使用的代码片段 xdoc etree parse mydoc xml sche
  • 为什么Python在函数中增加变量时会抱怨赋值前的引用?

    为什么Python会抱怨chrome在分配之前被引用 它不会抱怨字典 如果Python 2 5 有所不同的话 那就是这样 def f google browser chrome chrome 1 google dict chrome 1 f
  • 使用 pandas“to_csv”防止尾随零

    我正在尝试将 CSV 字符串导出到 D3 Web 应用程序 但是命令to csv坚持在数据中添加尾随 0 这会妨碍 D3 的正确使用 这是一个说明问题的最小示例 我的 简化的 数据框是 gt gt gt df pd DataFrame Al
  • macOS Sierra 上的 Python PyQt

    如何在装有 OS X Sierra 的 Mac 上使用 PyQt 4 或 5 看来我必须等待 PyQt 的新版本 但我不确定这是否属实 确保你有homebrew https brew sh安装 使用以下命令 brew tap cartr q
  • 如何调用 Numpy 数组中的元素?

    这看起来是一个非常简单的问题 但我找不到答案 如何调用 Numpy 数组中的元素 import numpy as np arr np array 1 2 3 4 5 6 7 8 9 10 print arr 0 0 上面的代码不起作用 只需
  • 如何使用 jython 将参数传递给 java 中的 python 脚本

    我正在尝试使用 jython 在 java 中执行我的 python 脚本 重要的是我需要使用 jython 将命令行参数传递给我的脚本 例如myscript py arg1 arg2 arg3 这里有一个类似的问题 在 Java 中将参数
  • 如何在Spyder(Anaconda 3)上安装PIL?

    这是我使用 conda install PIL 继续安装时出现的问题 它给了我这个 UnsatisfiableError The following specifications were found to be in conflict p
  • 是否可以模拟 Python 3.6 中的内置 len() 函数?

    是否可以模拟内置len Python 3 6 中的函数 我有一个类定义了一个简单的方法 该方法依赖于len 函数如下 class MyLenFunc object def is longer than three characters se

随机推荐

  • 将变量设置为“Nothing”是一个好习惯吗?

    If I got Dim myRect As Rectangle New Rectangle 0 0 100 100 Is it 必要的要不就fine稍后执行此操作 myRect Nothing 或者说没有必要 谢谢 IF这是必要的 还有其
  • 将 Pandas 列转换为 DateTime II

    我正在尝试将一列日期时间字符串转换为 Pandas 可理解的日期时间格式 当然 我已经用谷歌搜索并尝试了几种解决方案 将 Pandas 列转换为日期时间 这对我来说似乎是最鼓舞人心的 但两种推荐的方法都不适用于我的数据集 细节 数据集名称
  • Mule SMTP - 发送带有附件的电子邮件

    我正在尝试使用 Mule 3 3 0 并配置 SMTP 端点 该流可以具有文件入站端点和 SMTP 出站端点 另一个流可以有一个 Java 类 该类生成字符串内容 电子邮件正文 并创建一个 CSV 文件 它将尝试将其推送到 SMTP 出站端
  • 如何在 PHP 中对 JSON 数据进行分页?

    我无法从 PHP 直接访问数据库 如果是这样的话 我就可以简单地进行分页了 在这里 我向 PHP Web 服务发送 GET 请求 并以 JSON 形式获取数据库的结果 我有一个表 我想在其中显示数据库值 由于数据库表包含超过1000条记录
  • SonarQube 在主 AST 扫描期间“未找到类”

    我的设置 声纳库5 1 1 Sonar Maven Plugin 2 6 也尝试过2 7和3 6 JDK 1 7 0 51 错误示例 16 00 54 INFO 23 00 54 219 Sensor JavaSquidSensor 16
  • ChromeDriver 76.0.3809.68 使用 SelectByVisibleText 方法引发异常:脚本返回意外结果

    我已将 selenium chromedriver 更新到 76 0 3809 68 现有测试开始因新版本而失败Select webElement selectByVisibleText value 因以下异常而失败 org openqa
  • MPI_Type_create_subarray 和 MPI_Send

    这是我在 stackoverflow 中的第一个问题 我有两个进程 一个根 0 和一个从属 1 从属分配一个 2d 数组 CHUNK ROWS 2 CHUNK COLUMNS 2 并想要发送一个 CHUNK ROWS CHUNK COLUM
  • 将 JSON 日期(刻度)转换为 NSDate

    有谁知道如何在 Objective C 中将 JSON 日期 ticks 转换为 NSDate 有人可以发布一些代码吗 我在这里猜测 但你的 JSON 值是自 1970 年以来的毫秒数 对吧 您可以使用 NSDate 的dateWithTi
  • ProcessBuilder 找不到指定的文件,而 Process 可以[重复]

    这个问题在这里已经有答案了 我正在尝试从 Java 程序运行 jar 文件 并且使用成功getRuntime Process processAlgo Runtime getRuntime exec java jar algoPath 但是当
  • Google 图表错误:b.L 不是函数

    我使用 Google API 制作了一个包含 3 个图形的小页面 一切都很完美 然而 从一个时刻到另一个时刻都崩溃了 在图表中出现此消息的地方 bL 不是函数 有人可以向我解释为什么会发生这种情况吗 我的例子working
  • WPF XAML StringFormat:C# 4.0 中的文化解决方法被破坏?

    周围的工作 FrameworkElement LanguageProperty OverrideMetadata typeof FrameworkElement new FrameworkPropertyMetadata XmlLangua
  • 使用 Jersey 2 (HK2) DI 注册 Dropwizard 配置

    在我的 Dropwizard 1 2 4 应用程序中 我无法将 Dropwizard 配置注入到由 HK2 实例化的类中 实现这一目标的最佳方法是什么 只需绑定配置即可instance Override public void run fi
  • 我可以信任 Java SecurityManager 沙箱吗?

    我正在编写一个 JavaFX2 应用程序 它接受从远程位置加载的任意代码 对我来说 使用自定义 SecurityManager ClassLoader 和 ProtectionDomain 是最佳选择 不幸的是 这似乎与用于沙箱小程序的设置
  • 手动指定特定链接符号的重新映射

    在不修改这两个源文件的情况下 有没有办法获取编译它们生成的目标文件 并说服链接器链接foo在 main v1 c 中bar在bar c main v1 c void foo void int main void foo bar c incl
  • JavaScript 是多线程的吗?

    这是我的问题 我需要使用 jQuery getScript 动态下载多个脚本并执行某些JavaScript加载所有脚本后的代码 所以我的计划是做这样的事情 function GetScripts scripts callback var l
  • Python 和 C++ 模数

    我正在学习 C 在尝试编写一个小程序时 我发现了一些奇怪的东西 这是关于模数 C 代码 cout lt lt 325 325 100 lt lt endl 300 cout lt lt 325 325 100 300 和Python代码 p
  • 关于泛型方法调用的 Java 类型提示

    我想知道调用具有如下签名的静态方法的正确方法是什么 public static
  • 如何获取单选按钮的文本(而不是值)

    我知道我可以获取单选按钮的 值 属性 但我发现获取单选按钮的文本非常困难 考虑下面的例子 它有 3 个单选按钮 并尝试提醒第一个单选按钮的值 红色 然后尝试提醒单选按钮的文本 苹果 但失败了 获取几乎任何元素的文本都可以使用 elem ch
  • 正则表达式在文件夹中查找文件

    如何查找文件夹中与正则表达式模式匹配的所有文件 Thanks The GetFiles方法允许您指定通配符模式 但不是真正的正则表达式 另一种可能性是简单地循环遍历文件并根据正则表达式验证它们的名称 IEnumerable
  • 将图像大小调整到给定边界区域的最简单方法是什么?

    我想创建一个函数 例如 def generateThumbnail self width height Generates thumbnails for an image im Image open self file im thumbna