使用 PIL 为高维图像绘制矩形时,draw.rectangle([x1, y1, x2, y2], fill="Black") 中出现错误

2024-03-25

当使用 PIL python 库为高维 png 文件(770x1024)绘制矩形时,我在 draw.rectangle([x1, y1, x2, y2], fill="Black") 中遇到错误。但它适用于中等尺寸的图像。

img = Image.open(BytesIO(file_byte_string))
width, height = img.size
.
.
if(doc.pages):
  page = doc.pages[0]
.
.
for field in page.form.fields: 
  if(field.key and field.value):

.
.    
  x1 = field.value.geometry.boundingBox.left*width
  y1 = field.value.geometry.boundingBox.top*height-2
  x2 = x1 + (field.value.geometry.boundingBox.width*width)+5
  y2 = y1 + (field.value.geometry.boundingBox.height*height)+2
  draw = ImageDraw.Draw(img) 
  draw.rectangle([x1, y1, x2, y2], fill="Black")
.
.

示例 x1, y1, x2, y2 抛出错误:x1: 504.6949750185013 y1: 243.70870971679688 x2: 557.9484252631664 y2: 255.90338134765625我该如何处理这个问题?我是否需要以编程方式调整大小或任何其他替代解决方案?

这是堆栈跟踪:

======================================================================
ERROR: testDataPull (__main__.TestLambda)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Python\Python38\lib\site-packages\PIL\ImagePalette.py", line 99, in getcolor
    return self.colors[color]
KeyError: (0, 0, 0)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\TestLambda\lambda_test.py", line 22, in testDataPull
    lambda_handler(event, "")
  File "c:\TestLambda\lambda_function.py", line 21, in lambda_handler
    ret_str = redact_go(my_bucket,my_key)
  File "c:\TestLambda\redact.py", line 63, in redact_go
    draw.rectangle([x1, y1, x2, y2], fill="Black")
  File "C:\Python\Python38\lib\site-packages\PIL\ImageDraw.py", line 246, in rectangle
    ink, fill = self._getink(outline, fill)
  File "C:\Python\Python38\lib\site-packages\PIL\ImageDraw.py", line 118, in _getink
    fill = self.palette.getcolor(fill)
  File "C:\Python\Python38\lib\site-packages\PIL\ImagePalette.py", line 109, in getcolor
    self.palette[index + 256] = color[1]
IndexError: bytearray index out of range

----------------------------------------------------------------------
Ran 1 test in 20.892s

FAILED (errors=1)

我怀疑问题在于,当您打开较小的图像时,它的像素和颜色较少,因此更有可能是调色板图像而不是全彩 RGB 图像 - 请参阅here https://stackoverflow.com/a/52307690/2836621进行解释。

因此,我建议您在程序开始时更改为:

# Open image and ensure it is 3-channel RGB, not palettised
img = Image.open(BytesIO(file_byte_string)).convert('RGB')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PIL 为高维图像绘制矩形时,draw.rectangle([x1, y1, x2, y2], fill="Black") 中出现错误 的相关文章

随机推荐

  • 如何将毫秒转换为日期字符串?

    我从服务器得到一个毫秒字符串 如下所示 1345623261 我如何将其转换为正常的日期格式 例如2012 年 8 月 30 日 我尝试使用setMilliseconds 像这样 new Date setMilliseconds time
  • 用不同的猜名称猜数字游戏

    这是我第一次使用 stackoverflow 进行访问 我是编程新手 正在学习 Python 初学者课程 很高兴开始 我们的第二个作业要求我们创建著名的猜数字游戏 对于那些已经了解这个游戏的人 我希望对添加到其中的额外部分提供一些帮助 我们
  • Robolectric junit 测试 - 缺少互联网许可

    我正在为 ma 应用程序开发一些 JUnit 测试 我需要使用 Robolectric Roboguice 库 我现在想做的只是简单的测试 检查 Activity 是否不为空 这是我的代码 RunWith RobolectricGradle
  • VS 解决方案文件的 Windows 资源管理器上下文菜单中的“构建”项?

    我想知道为什么默认情况下不集成它 我希望在 VS 解决方案文件的 Windows 资源管理器的文件上下文菜单中有一个项目来构建它 有这个工具吗 或者我必须自己创建这个 MSBuild Shell 扩展已经存在多年了 http msbuild
  • Jackson 反序列化抽象类

    我正在尝试使用 JSON ObjectMapper 反序列化对象 尝试反序列化时我看到以下错误 com fasterxml jackson databind JsonMappingException 无法构造 com phoenix typ
  • 如何隐藏微调器下拉菜单android

    我想隐藏外部点击时弹出的微调提示 如果提示弹出窗口打开并且用户按主页键活动将最小化 因此当用户再次打开应用程序时 提示弹出窗口应该消失 有什么办法可以实现这一点吗 谢谢 编辑 提示弹出窗口未自定义 所以我不能把它们藏起来onPause or
  • 为什么 Postgres 复制流在单独的函数中使用时不起作用?

    我正在研究 postgres 复制流 API 在处理它的过程中遇到了异常行为 当我使用复制槽在主块内编写整个代码时 一切正常 public class Server implements Config public static void
  • 如何使用LocalBroadcastManager?

    如何使用 定位LocalBroadcastManager如中所述谷歌文档 http developer android com reference android support v4 content LocalBroadcastManag
  • 我可以按顺序链接异步任务吗(在上一个异步任务完成后开始一个)

    每次我做一个httpRequest 当代码执行时 屏幕会被锁定几秒钟 因此我用了AsyncTask做我所有的httpRequest东西在一个单独的线程 同时提出ProgressDialog所以用户知道发生了什么事 我最近遇到了以下情况 我的
  • 角-聚合物相互作用

    我计划尝试 AngularJS 中的一个项目 其中所有组件都将使用 Polymer 开发 在开始这个项目之前 我有几个疑问 使用 Angular 服务获取数据后 我可以更新 Polymer 组件数据模型 也可以通过 UI 吗 如果是 那么如
  • 之前和之后的样式输入范围

    我正在关注这个方法 http css tricks com styling cross browser compatible range inputs css 来自 CSS Tricks 来设置输入范围的样式 并尝试使用之前和之后的伪类 下
  • Breeze JS - 带有 EFContextProvider 的存储库,启用/禁用 OData 过滤

    我正在寻找使用微风 EFContextProvider 实现存储库模式 在此存储库中 我将公开一种使用 OData 过滤来查询数据库的方法 就像默认情况下微风的行为一样 我还想公开一个忽略 OData 过滤的方法 并返回一个元素列表 就好像
  • 检测所有摄像头android

    我有一个使用 Camera2 API 来获取相机预览的应用程序 我想在手机的镜头之间进行选择 在我的代码中 我使用以下代码 CameraManager manager CameraManager activity getSystemServ
  • 按数字顺序对目录中的文件进行排序和列出

    这是我的文件夹结构 home files encounters 9 22 11 0 jpg home files encounters 9 22 11 n jpg puts Dir glob home files jpg 0 当我执行上面的
  • Money_format() 选项

    我正在查看 php 中的 Money format 函数 并对如何让它按照我想要的方式格式化感到困惑 我不想在字符串前面有 USD 我想要每 3 位数字和 2 位小数点有一个逗号 因此 12345 67 将被格式化为 12 345 67 T
  • 如何创建接受可变数量参数的 Java 方法?

    比如Java自己的String format 支持可变数量的参数 String format Hello s ABC d World 123 gt Hello World ABC 123 如何创建自己的函数来接受可变数量的参数 后续问题 我
  • 如何将动态对象转换为 JSON 字符串 C#?

    我有以下从第三方库获得的动态对象 IOrderStore os ss GetService
  • 如何在 Node.js 中存储请求级变量?

    对于只需要在单个请求期间可用的数据 应该将其存储在哪里 我正在 req 和 res 对象上创建新属性 因此我不必将数据从一个函数传递到另一个函数 req myNewValue just for this request 进程对象是一个选项吗
  • 在新的(GUI)窗口中打开 vim 选项卡?

    我想将当前选项卡移动到 MacVim 中的新 视觉 真实 窗口中 这可能很困难 因为 vim 帮助中没有任何内容 只有很少的 没有帮助 在 google 上点击 MacVim 不支持它 link http code google com p
  • 使用 PIL 为高维图像绘制矩形时,draw.rectangle([x1, y1, x2, y2], fill="Black") 中出现错误

    当使用 PIL python 库为高维 png 文件 770x1024 绘制矩形时 我在 draw rectangle x1 y1 x2 y2 fill Black 中遇到错误 但它适用于中等尺寸的图像 img Image open Byt