二进制文件转成文本保存,并可以读回


以 JPEG 图片为例,以下代码演示了如何将一个 JPEG 图片保存为纯文本形式,并将其以图片形式读回并显示。
保存 TXT:

function TForm1.JpegToText(AFileName:string; SaveFile: Boolean; TxtFileName: string): string;
var
FileStream        : TFileStream;
StringStream      : TStringStream;
FSize             : integer;
FileData          : string;
i                 : integer;
DataStr           : string;
begin
try
    FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
    StringStream := TStringStream.Create(EmptyStr);
    FSize := FileStream.Size;
    StringStream.CopyFrom(FileStream, FSize);
    FileData := StringStream.DataString;
    DataStr := EmptyStr;
    for i := 1 to Length(FileData) do
    begin
      DataStr := DataStr + InttoHex(Ord(FileData[i]), 2);
    end;
    Result := DataStr;
    if SaveFile then
    begin
      with TStringList.Create do
      begin
        Text := DataStr;
        SaveToFile(TxtFileName);
        Free;
      end; 
    end; 
finally
    freeandnil(FileStream);
    freeandnil(StringStream);
end;
end;

从 TXT 读回 JPEG:

function TForm1.TextToJpeg(AFileName: string; SaveFile: Boolean; JpegFileName: string): TJPEGImage;
var
buf               : array of Byte;
DataLength        : Integer;
i                 : Integer;
DataStr           : string;
ByteFile          : file of byte;
jpg               : TJPEGImage;
tmpFileName: string;
begin
with TStringList.Create do
begin
    LoadFromFile(AFileName);
    DataStr := Text;
    Free;
end;
DataLength := Length(DataStr) div 2-1;
SetLength(buf, DataLength);
for i := 1 to DataLength do
begin
    buf[i - 1] := StrToInt('$' + copy(DataStr, (i - 1) * 2 + 1, 2));
end;
tmpFileName := ExtractFilePath(ParamStr(0))+'tmp.jpg';
AssignFile(ByteFile, tmpFileName);
Rewrite(ByteFile);
for i := 0 to DataLength - 1 do
begin
    write(ByteFile, buf[i]);
end;
CloseFile(ByteFile);
Result := TJPEGImage.Create;
Result.LoadFromFile(tmpFileName);
if SaveFile then
    Result.SaveToFile(JpegFileName);
DeleteFile(tmpFileName);
end;
优质内容筛选与推荐>>
1、5.23会议记录
2、Ext 2.0.1 Grid 增删改 & DWR 1 实例 - 操作数据库版本(带源码) (beansoft)
3、django 带參数的 url
4、SQL中一个很好用的日期格式化函数
5、Python 字符串关键字过滤


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号