使用libjpeg

时间:2018-09-27 22:49:26

标签: c libjpeg libjpeg-turbo jpegtran

我有一个应用程序,我想在该应用程序中执行JPEG中的图块的无损交换,从而生成如下文件:image with tiles swapped 为此,我已经能够制作一个概念验证的python脚本,该脚本反复调用具有裁剪和拖放支持的补丁jpegtran,如下所示:

# Export tiles
for i, swap in enumerate(swaps):
    if i > 0:
        continue
    commanda = [
        jtp,
        "-crop", "{}x{}+{}+{}".format(dividerWidth, dividerHeight, swap["sx"], swap["sy"]),
        "-outfile", "tmp/s{}s.jpg".format(i),
        "original.jpg"
    ]
    commandb = [
        jtp,
        "-crop", "{}x{}+{}+{}".format(dividerWidth, dividerHeight, swap["dx"], swap["dy"]),
        "-outfile", "tmp/s{}d.jpg".format(i),
        "original.jpg"
    ]
    print(list2cmdline(commanda))
    call(commanda)
    print(list2cmdline(commandb))
    call(commandb)


# Then drop them on the original
for i, swap in enumerate(swaps):
    command = [jtp]
    if i == len(swaps) - 1:
        command.append("-optimize")

    source = "mixed.jpg"
    if i == 0:
        source = "original.jpg"

    commanda = command.copy()
    commanda.extend([
        "-drop", "+{}+{}".format(swap["dx"], swap["dy"]),
        "tmp/s{}s.jpg".format(i),
        "-outfile", "mixed.jpg",
        source
    ])

    commandb = command.copy()
    commandb.extend([
        "-drop", "+{}+{}".format(swap["sx"], swap["sy"]),
        "tmp/s{}d.jpg".format(i),
        "-outfile", "mixed.jpg",
        "mixed.jpg"
    ])
    print(list2cmdline(commanda))
    call(commanda)
    print(list2cmdline(commandb))
    call(commandb)

但是,这是非常低效且缓慢的。我开始尝试制作一个受jpegtrans源代码启发的版本(版本已修复),但没有用。我不明白如何在执行(jtransform_execute_transformation)之后将裁剪的图像(以jpeg_compress_struct格式)拍摄,然后将其拖放到图像上。我似乎可以只用内存中的整个图像的一个副本来完成此操作,然后裁剪出部分并将其放置在其他位置,但是我不知道该怎么做。

0 个答案:

没有答案