将图像作为二进制数据写入文本文件 C#

2024-01-15

我需要创建一个文件,将图像作为文本嵌入到某些记录中。我在将图像写入文本时遇到一些问题。我正在做的是将图像作为字节数组从 SQL 数据库(图像类型)收集,然后通过遍历每个字节并将该字节的 ASCII 等效项写入该文件,将该图像写入文本文件。

在将该图像写入文本文件之前,我必须将其转换为 CCITT4 格式的 TIFF(以前是 jpeg)。为了仔细检查是否正确完成,我还将流保存为 TIFF 并在“AsTiffTagViewer”中查看它,这表明压缩是正确的。我能够在适当的查看器中查看冲突;但是,当从文件中收集文本时,我无法查看图像。

这是代码:

byte[] frontImage = (byte[])imageReader["front_image"];
MemoryStream frontMS = new MemoryStream(frontImage);
Image front = Image.FromStream(frontMS);
Bitmap frontBitmap = new Bitmap(front);
Bitmap bwFront = ConvertToBitonal(frontBitmap);
bwFront.SetResolution(200, 200);
MemoryStream newFrontMS = new MemoryStream();
bwFront.Save(newFrontMS, ici, ep);
bwFront.Save("c:\\Users\\aarong\\Desktop\\C#DepositFiles\\" + checkReader["image_id"].ToString() + "f.tiff", ici, ep);
frontImage = newFrontMS.ToArray();   
String frontBinary = toASCII(frontImage); 

private String toASCII(byte[] image)
{
    String returnValue = "";
    foreach (byte imageByte in image)
    {
        returnValue += Convert.ToChar(imageByte);
    }
    return returnValue;
}   

正在写入文件的是 frontBinary。有谁知道出了什么问题吗?保存的 tiff 是正确的,但完全相同的字节数组在写入 ASCII 文本时未正确写入。

谢谢。

EDIT通过使用 BinaryWriter(byte[]) 将图像正确写入文本,此问题已得到纠正。感谢大家的帮助!


一方面,ASCII 只有七位。但是,我不相信您的代码实际上使用了 ASCII。它隐含地使用了 ISO-8859-1。

Never将文本视为二进制,反之亦然。它会always导致问题。

将二进制转换为 ASCII 文本的最佳方法是使用 Base64:

string text = Convert.ToBase64String(frontImage);
byte[] data = Convert.FromBaseString(text);

另请注意,如果您的代码did工作,但效率仍然很低 - 继续阅读字符串生成器 http://pobox.com/~skeet/csharp/stringbuilder.html然后考虑你的代码半等价于

Encoding.GetEncoding(28591).GetString(data);

然而,base64 绝对是文本和二进制数据之间无损转换的最佳方式。当然,您需要将其转换回二进制格式才能再次查看 TIFF。

请注意,您尚未显示如何保存或加载数据 - 您也可能会遇到问题。事实上,我怀疑如果你能够准确地保存字符串,你might很幸运并保留了数据,具体取决于您正在用它做什么......但无论如何都要使用base64。

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

将图像作为二进制数据写入文本文件 C# 的相关文章

随机推荐

  • 函子定律是否证明了结构的完全保留?

    在文档中数据函子 http hackage haskell org package base docs Data Functor html以下两条被规定为函子法则 所有函子都应遵守 fmap id id fmap f g fmap f fm
  • makecontext 参数 #2 的 C++0x lambda

    我在将 C 0x lambda 函数作为第二个参数传递给makecontext 来自 ucontext h 的签名makecontext is void makecontext ucontext t void int 以前 我能够应用 C
  • 忽略模糊匹配并使用 javascript 添加精确的单词模式匹配

    我正在尝试为我的网站创建一个文本突出显示选项 但我想要精确的单词匹配而不是模糊的单词匹配 我的代码匹配所有类型的实例 并且存在一些区分大小写的问题 如果我们以 Jfiddle 为例 我只想添加这个词cancer 区分大小写不应该成为问题 并
  • 如何从维基百科中获取纯文本

    我想编写一个仅获取维基百科描述部分的脚本 也就是说 当我说 wiki bla bla bla 它将转到维基百科页面为bla bla bla http en wikipedia org wiki Bla Bla Bla 获取以下内容 并将其返
  • 如何在运行时获取NHibernate在代码中生成的SQL?

    我知道您可以通过将 NHibernate 生成的 SQL 连接到 log4net 或通过管道将其输出到控制台 show sql 选项 来查看 NHibernate 生成的 SQL 但是有没有办法在运行时在代码中获取生成的 SQL 我希望能够
  • Excel VBA - 网页抓取 - 获取 HTML 表格单元格中的值

    我正在尝试创建一个宏来抓取货物跟踪网站 但我必须创建 4 个这样的宏 因为每家航空公司都有不同的网站 我是 VBA 和网页抓取的新手 我已经整理了适用于 1 个网站的代码 但当我尝试将其复制到另一个时 我陷入了循环 我想这可能是我指代该元素
  • Excel VBA:将计算结果数组作为参数传递给函数

    我有一个接受数组的 VBA 函数 如果我向它传递一个引用 例如A1 A10 它不接受 公式 参数 例如A1 A10 1 or A1 A10 2 生成的单元格包含 VALUE 许多Excel函数都支持这一点 例如linest 我可以编写以下公
  • 如何解决 R Markdown (Knit)“‘closure’不可子集化”?

    我第一次尝试使用 RMarkdown Knit 来生成 pdf 默认文件 文件 gt 新建文件 gt R Markdown 运行良好 它显示编译时生成的 pdf 例如 运行以下代码 r cars summary cars 但是 如果我只是用
  • Meteor collection.insert回调问题

    根据 Meteor 文档 collection insert doc callback callback功能 选修的 如果存在 则使用错误对象作为第一个参数和 id 作为第二个参数进行调用 然后往下 在服务器上 如果您不提供回调 则插入块直
  • Unity单例代码

    我是新来的Unity http unity codeplex com 我正在尝试编写一些 Unity 逻辑来初始化和注册 解析 Email 对象的单例实例 以便它可以在多个其他对象中使用 下面的一个示例是 OperationEntity 因
  • Microsoft.ML 和 Xamarin

    Microsoft ML 在 Xamarin 中工作吗 我已经关注了许多教程和视频https dotnet microsoft com learn ml dotnet https dotnet microsoft com learn ml
  • 如何使用JAVA从html页面获取表格

    我正在开发一个项目 尝试从互联网获取财务报表并在 JAVA 应用程序中使用它们来自动创建比率和图表 我正在使用的网站使用登录名和密码才能进入牌桌 标签是 TBODY 但 html 中还有另外 2 个 TBODY 如何使用 java 将表打印
  • Matplotlib - 添加与轴底部对齐的标签

    我想向图表上的垂直线添加标签 本例中为洋红色线 TEXT TO GO HERE 问题是我不知道 Y 轴的最小值 因为该轴是自动的 并且 text 函数需要 x 和 y 值 我希望能够将文本与图的底部对齐 或者找到最小 Y 轴值 在本例中 m
  • 如何在应用程序中的所有类之间共享数组?

    我想共享一个数组 所有类都可以 获取 和 更改 该数组内的数据 类似于全局数组或多路访问数组 这如何通过 ActionScript 3 0 实现 有几种方法可以解决这个问题 一种是使用全局变量 如 unkiwii 的答案中所建议的 但这在
  • 在终端中运行每个命令后看到“致命:拒绝将 HEAD 指向 refs/ 之外”

    我已经几周没有使用终端了 在运行 Brew Upgrade 来升级 更新我的所有软件包后 我开始在运行每个命令后看到 致命 拒绝将 HEAD 指向 refs 之外 我不太熟悉终端或 Git 所以我不知道这意味着什么 请提供一些建议 场景来解
  • 错误:当我用 gradle 中的实现替换编译时(依赖项)

    我将 Android Studio 从 3 0 1 更新到 3 1 0 但更新后 当我构建我的项目时 它显示2 警告 1 用实现代替编译 编译支持将于 2018 年底结束 2 将 testCompile 替换为 testImplementa
  • 火花作业卡桑德拉错误

    每次我使用 cassandra 连接器在 Spark 中运行 scala 程序时都会收到此错误 Exception during preparation of SELECT count FROM eventtest simpletbl WH
  • 如何将 useRef 与 Typescript/Formik 一起使用?

    我正在通过一个ref属性到我的自定义 FieldInput 中 我使用它来验证表单的 Formik 然而 它给出了一些 Typescript 错误 例如 在我的函数中 const handleSubmitForm values FormVa
  • 错误:找不到模块“index”\n需要堆栈:\n- /var/runtime/index.mjs

    我正在尝试通过 CDK 部署在打字稿中实现的 lambda 我能够成功部署 lambda 但是当我测试它时 出现以下错误 errorType Runtime ImportModuleError errorMessage Error Cann
  • 将图像作为二进制数据写入文本文件 C#

    我需要创建一个文件 将图像作为文本嵌入到某些记录中 我在将图像写入文本时遇到一些问题 我正在做的是将图像作为字节数组从 SQL 数据库 图像类型 收集 然后通过遍历每个字节并将该字节的 ASCII 等效项写入该文件 将该图像写入文本文件 在