【问题标题】:Extract/Convert an (multi-file)image that converted提取/转换转换后的(多文件)图像
【发布时间】:2018-08-20 21:13:58
【问题描述】:

我有一个用程序制作的文件,一个图像贴纸制造商。 我知道这个程序将它的图像(可能是图像、bg 和掩码)保存到扩展名为“.adf”的单个文件中。

我无法使用图像魔法转换输出文件,导致以下错误:

convert: no decode delegate for this image format `output.adf' @ error/constitute.c/ReadImage/532.

我不知道这个 Image 是如何用 Image magick 转换的。 这是我的 -list 配置结果:

Path: [built-in]

Name          Value
-------------------------------------------------------------------------------
NAME          ImageMagick

Path: configure.xml

Name          Value
-------------------------------------------------------------------------------
CC            vs10
COPYRIGHT     Copyright (C) 1999-2011 ImageMagick Studio LLC
DELEGATES     bzlib freetype jpeg jp2 lcms png tiff x11 xml wmf zlib
FEATURES      OpenMP
HOST          Windows
LIB_VERSION   0x671
LIB_VERSION_NUMBER 6,7,1,0
NAME          ImageMagick
RELEASE_DATE  2011-07-15
VERSION       6.7.1
WEBSITE       http:// www.image magick.org

我附上了文件: src.adf

* 编辑 * 如果我在 src.adf 上运行文件命令,它会告诉:

root@MexHex-PC:# file -vv src.adf
file-5.25
magic file from /etc/magic:/usr/share/misc/magic

错过了什么!? 谢谢

【问题讨论】:

  • 据我所知,Imagemagick 不支持后缀为 .adf 的文件。那似乎是一个数据库文件而不是图像。见fileinfo.com/extension/adf。此外,我什至无法从该站点下载您的文件。它一直要求我下载闪存,我已经拥有并且不信任该弹出窗口。我怀疑 Imagemagick 创建了该文件。但您的主要工具可能是独立创建的。
  • 更正。还有其他后缀为 .adf 的图像格式。请参阅 coolutils.com/Formats/ADFen.wikipedia.org/wiki/Amiga_Disk_File。您的文件可能来自第一个链接。见community.esri.com/thread/54775。但据我所知,至少在我的 Imagemagick 上,它没有列出那种格式。
  • 如果您使用的是 Unix/Linux,请尝试运行 file src.adf 以查看是否可以确定其类型。
  • 我确定这个文件是用 Imagemagick 制作的。我已经看到有人会将文件转换为 tiff 图像。他告诉我用 Imagemagick 做这个,但没有解释方法。程序的输出(dalahoo3D)也是一个蒙版中的图片,可以用激光切割,创建一个贴在墙上的三维棒。我猜这个扩展名(adf)是一个无关紧要的名字!
  • “二进制八位字节流” 表示“加载无法识别的内容”!尝试运行strings src.adf | more,看看里面有没有可识别的英文单词。

标签: imagemagick


【解决方案1】:

这个src.adf 看起来像一个非常小且扁平的数据文件。我对 Dalahoo3D 和/或 ArcGis 产品一无所知,但我们可以使用 python 快速提取嵌入的图像。

import struct

with open('src.adf', 'rb') as f:
    # Calculate file size.
    f.seek(0, 2)
    total_bytes = f.tell()
    # Rewind to beging.
    f.seek(0)
    file_cursor = f.tell()
    image_cursor = 0

    while file_cursor < total_bytes:
        # Can for start of JPEG.
        if f.read(1) == b"\xFF":
            if f.read(3) == b"\xD8\xFF\xE0":
                print("JPEG FOUND!")
                # Backup and find the size of the image
                f.seek(-8, 1)
                payload_size = struct.unpack('<I', f.read(4))[0]
                # Write image to disk
                d_filename = 'image{0}.jpeg'.format(image_cursor)
                with open(d_filename, 'wb') as d:
                    d.write(f.read(payload_size))
                image_cursor += 1
            else:
                f.seek(-3, 1)  # Back cursor up, and try again.
        file_cursor = f.tell()

转储以下三张图片...

我确定这个文件是用 Imagemagick 制作的。我已经看到有人会将文件转换为 tiff 图像。他告诉我用 Imagemagick 做这个,但没有解释方法。

我猜这只是沟通不畅的问题。确实,ImageMagick 通常处理 JPEG / TIFF 格式,但不处理地理信息系统和/或 3D 建模。这通常由供应商扩展——比如 ArcGIS。我敢打赌 ImageMagick 存在于生成 TIFF 文件的工作流程中,但在 someone writes a delegate coder 之前,ImageMagick 不会支持 .ADF

更新

来自this question,看起来您需要扩展 ImageMagick 委托来调用 GDAL 实用程序。您需要更新 delegates.xml 文件以调用 correct utility

【讨论】:

  • @emcconville。分析得不错!
  • @emcconville 真的很酷!你能向我解释一下你是如何得到这个解决方案的吗?这些字节应该如何解决问题?
  • @emcconville 看起来它没有找到其中一张图片(可能是最后一张图片)!代码应该在哪里更改?
  • 我创建了这个解决方案来评估数据流和识别数据结构。专业人员之间的技术不同,但一项共同的任务。至于丢失的图像,我只看到 3 个 JPEG,你在期待什么?也许是矢量剪辑桅杆,或者其他什么?
  • 试试更新的python代码。前面的 LSB 整数可能无法通过 JPEG 签名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2015-02-14
  • 1970-01-01
相关资源
最近更新 更多