1

JPEG でタイルのロスレス スワッピングを実行したいアプリケーションがあり、その結果、次のようなファイルが生成されます。タイルを入れ替えた画像 そのために、パッチを適用したファイルを繰り返し呼び出す概念実証の 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 で) 取得する方法がわかりません。メモリ内の画像全体のコピーを1つだけ使用してこれを実行し、一部を切り取って他の場所にドロップできるように思えますが、どうすればよいかわかりません。

4

0 に答える 0