能否将图像存储到PDF417条形码中?

6

是否可以将图像/图片存储(编码)到pdf417条形码中?如果可以,是否有任何教程或示例代码?

条形码不能仅仅保存数据库中图像的引用。客户还希望能够存储他想要的任何图像。

谢谢。


2
PDF417允许存储2710个字符,因此我认为可以用相对较小的图像完成。不过我必须问一下:你为什么想这样做呢? - Crono
我的一个客户想要在条形码中添加一张图片,这样当他们扫描时,很可能想看到这张图片。 - ashesh16
2
然后,图像应存储在数据库中,条形码应包含每个相关信息的结构,以及与关联图像相关联的引用(ID)。在我的看法中,将图像本身存储在条形码中是低效的。 - Crono
你的客户需要什么类型的图片?符号、标志吗?他们肯定不会期望高分辨率的位图文件,对吧? - Crono
@Crono: 早期的PDF-417宣传材料中包含了一个条形码,其中包含了一张非常小的图片。其意图是ID应该包含一个高质量的实体印刷的证件照和一个(低得多的)证件照的PDF-417编码、数字签名、扫描副本。尽管高速互联网接入现在已经普及,但这并不总是真实的;将图片包含在扫描中可以避免需要"实时"网络连接的需求。 - supercat
显示剩余5条评论
2个回答

5

正如ssasa提到的那样,您可以将图像存储为byte数组:

public static byte[] GetBytes(Image image)
{
    byte[] byteArray = new byte[0];
    using (MemoryStream stream = new MemoryStream())
    {
        // you may want to choose another image format than PNG
        image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
        stream.Close();

        byteArray = stream.ToArray();
    }
    return byteArray;
}

如果必须为 string 类型,您可以对其进行 base64 编码:

public static string GetBase64(Image image)
{
    Image yourImage;

    // using the function from the first example
    var imageBytes = GetBytes(yourImage);   

    var encodedString = Convert.ToBase64String(imageBytes);

    return Encoding.UTF8.GetBytes(encodedString);
}

请记住:PDF417条形码可以存储多达2710个字符。虽然这对于大多数你想编码的结构来说已经足够了,但对于图像来说却有些限制性。它可能足以用于小尺寸位图、单色图像和/或高度压缩的JPEG图像,但不要期望能做更多的事情,特别是如果你想能够存储其他数据。
如果您的客户希望能够存储,正如您所说的,他们想要的任何图片,那么在编写任何代码之前,您最好尽快降低他们的期望值。
如果可以的话,您可以考虑使用QR码。虽然它们也不能创造奇迹,但您可能会喜欢其增加的存储容量。

不必将图像进行base64编码,因为PDF417可以包含二进制数据。 - ssasa
@ssasa 可能是的,但我想如果 OP 提出这个问题可能是因为他正在使用一个只能将字符串转换为条形码的第三方 API。无论如何,你说得对。我编辑了我的回答。感谢你的观察。 - Crono
@Corono 如果我按照你上面说的做,那么客户在从条形码获取信息后就必须解码对吗? - ashesh16
@user3482061,恐怕我不太明白你在这里问什么。条形码应该保存编码信息以供扫描设备解码。该设备必须将解码后的信息传递给软件组件,以便知道如何处理它。除此之外的任何事情都取决于你。 - Crono
@Corono,非常感谢您的时间和帮助。 - ashesh16
@user3482061,不用谢。如果您觉得我的回答有帮助,请将其标记为答案。谢谢。 - Crono

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接