首页 > 解决方案 > 如何将图像的奇数长度十六进制转换为base64

问题描述

我将图像存储在十六进制字符串中,其中一些是奇数长度的字符串。我需要将这些转换为 base64 以上传到 Clarifai 的 API,该 API 将 base64 图像作为输入。这些字符串很长,超过 30k 个字符。偶数长度的字符串工作正常,但我不知道如何处理奇数长度的字符串。

我尝试使用以下代码段将奇数字符串转换为偶数,方法是在开头用 0 填充它们,但是,这些字符串也不起作用。

    lab = row['concept_name']
    img_hex = row['image_byte']
    if len(img_hex) % 2 != 1:
        img_from_hex = bytes.fromhex(img_hex.replace('0x', ''))   
     else:
        img_from_hex = bytes.fromhex(img_hex.replace('0x','0'))

当我只是尝试计划在没有填充的情况下转换图像时,我收到了这个错误

ValueError: non-hexadecimal number found in fromhex() arg at position 32757

可以在此处找到示例文件

任何帮助将不胜感激。

标签: pythonbase64hex

解决方案


对于后代,奇数长度的十六进制字符串(用于图像)的长度必须是偶数。如果他们不是,您将度过一段非常糟糕的时光。您可以尝试在开头剥离 0x,然后在开头或结尾填充 0 以查看是否有效。如果没有,则表示字符串中存在数据丢失或损坏。除非您知道腐败的确切位置,否则您无能为力


推荐阅读