![如何从源保存图像文件](https://linux22.com/image/1489345/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%BA%90%E4%BF%9D%E5%AD%98%E5%9B%BE%E5%83%8F%E6%96%87%E4%BB%B6.png)
我有以下 RTF 格式的图像源。
{\*\shppict{\pict\pngblip\pichgoal1020\picwgoal1200
89504e470d0a1a0a0000000d494844520000005000000044080200000099342577000000017352474200aece1ce90000000467414d410000b18f0bfc
6105000000097048597300000ec300000ec301c76fa8640000033449444154785eed9a4b8edc300c44fb12d96599c3e60a395aae102067e8105d6582
2e49b4d4767b6cc70f8581cc9f58fd19cc621ecfff8cdbf0d5b90d5f829f8f6f109f036b0dfbe8638a5b06860dcbc4838b4b076ec34bc84488b93370
cd5f5a09b7e1cff3f7fb0f1113bbb0b7e1aabd3d3d9fd5b0b5b818ea631bc39db72665a3ab7bf15097b193e14e3f9d35b1aca725b29f619e527acaa4
e60b0cbfb165425e59666fc30bbc63d8eec8c5ba8932929014575343c38d61c33d7e2c12c568c1afdf7faa62baa03a2a995f65c0706bfbfc4a74b918
6dbb35b1624eec8db4e22d7a0d27738752888843112a85d62dc9ed55de372c5b1e565c7762c0b00c3a976823372c3da7162d550d4b694b28cebf42e5
e7c2e3dee807a9846281d08a3b3207cc0cc78a522c9a93df5a6db716c81fed67ac8c6acd6fc51d99c3280c4b2e0a45c6d0c532c4c4c4546f3ffdf00a
eb4be3e7ea7ca31537bcd7c5c48b87e42026e754ef2883320a626eaab79f7e7885eb5da672be510d1ad20b3137a186196ee08b3af228d3cacd10c19c
98954617d38172a6215d10737368984f1dc87dc9d208c6023fdb01c2a321bd2ea603b10b488b89891a031f6920f7f9636b42acf7b31d20e92a857a27
4e33a4d8c4449bbae1a309bb46b75260626289231ab6b52462825b09422f23bdd4ffd292899f13ef2b90b2446ce826fbd3b2ca269f2b43be8d119f66
357e16b1749c370dcbf526643b49dc1a32b925560f326cd8285f7826bae9797b3bc5b66ede312c57e66f579521c3568c7a8947a1b787b5861119f29c
17c7e1c97c293331b1c42ac37c7ee1ef43026af2b238dc2bcb1644bcd8856cc2da775856b1c744490d522552e662fa45dc0762a2c6aedfe172572749
198b57c84a10737336306c6222657169237939784a91ad20e626de310c64eee24e3b1806b218c4dc1ac3860c85982bd8cd3090ad4c88af326cc85017
d3139d1b6f6818945bad35ecc86897eddaef7673c386ecb3996120d345b09488530a92540f71878d0d3bf18e9658dac14ac3865ffa29c38edfb42836
ccc9dff92170cbc70d1bbeb17beb516cdc0a1b3b6658fea7f4148a2f629761e93f9d6ec34b483fa3a7658f5f5a87e2367c756ec357e7367c756ec357
e7367c6d9ecf7fb9245ee11e01346e0000000049454e44ae426082
}}
问题 1:这段45bad35ecc86897eddaef7673c38
代码叫什么(十六进制)?问题 2:如何从上述源保存 png 图像?
答案1
它实际上是二进制 .png 图像的直接十六进制表示,甚至没有经过 base64 编码。换句话说,如果您创建一个名为 mypng.png 的文件,其中第一个字节是 0x89,第二个字节是 0x50,依此类推,忽略文本中的换行符,您应该能够打开并查看图片。(在本例中,它是一幅涂鸦)。
至于如何转换它,嗯,这取决于情况。
只是为了给你一个起点,因为你有 Word,如果你在 Word 中将文件作为文本文件打开(这样你就可以看到 RTF 代码而不是图片 - 你可能必须设置“打开时确认转换”Word 选项来执行此操作),选择数据字节,然后运行以下代码(你需要更改文件/路径名),你应该能够打开输出 .png
Sub saveSelectionAsBinary()
Const pngpath As String = "c:\a\mypng.png"
Dim i As Long
Dim s As String * 1
Dim t As String
Kill pngpath
Open pngpath For Binary As 1
t = Selection.Text
i = 1
Do While i <= Len(t)
If Mid(t, i, 1) = vbCr Then
Debug.Print "cr"
i = i + 1
Else
s = Chr(Val("&H" & Mid(t, i, 2)))
Put #1, , s
i = i + 2
End If
Loop
Close #1
End Sub
我认为“pngblip”显然告诉我们这应该是一张 .png 格式的图片,但 RTF 图片中还可以有其他类型的图片,而且它们不一定以这种方式编码。