非常に大きなJPGマップ画像をスライスする、49000* 34300ピクセル

StackOverflow https://stackoverflow.com/questions/2649048

  •  27-09-2019
  •  | 
  •  

質問

MapViewerを書きたい、大きなマップ画像ファイルの小さなタイルを作業する必要があり、大きな画像をタイル張りにする必要があります。今では、大きな画像を小さなタイル(250 * 250ピクセルまたはこのサイズのように)にタイリングすることです。さらに、私はそれを行うために画像プログラムを使用しましたが、今では問題がありました。ジャワのジャイと一緒に行うことはできますか?どうやって?

役に立ちましたか?

解決

Javaで自分でやってみましたか?私はこれを試しました(警告、大きな画像、あなたのブラウザをクラッシュさせ、「保存として...」を使用できます) この画像. 。しかし、余分なメモリで実行する必要がありました(-Xmx400M).

public class ImageTile {
    public static void main(String[] args) throws IOException {
        Dimension tileDim = new Dimension(250, 250);
        BufferedImage image = ImageIO.read(new File(args[0]));

        Dimension imageDim = new Dimension(image.getWidth(), image.getHeight());

        for(int y = 0; y < imageDim.height; y += tileDim.height) {
            for(int x = 0; x < imageDim.width; x += tileDim.width) {

                int w = Math.min(x + tileDim.width,  imageDim.width)  - x;
                int h = Math.min(y + tileDim.height, imageDim.height) - y;

                BufferedImage tile = image.getSubimage(x, y, w, h);
                ImageIO.write(tile, "JPG", new File("tile-"+x+"-"+y+".jpg")); 
            }
        }
    }
}

他のヒント

あなたが持っているような大きな画像のサイズの場合、JPEGファイルのロスレス編集を最適に提供します。画像をレンダリングする必要がないため、これはより速いだけでなく、画像が再圧縮されていないため、品質も維持します。

ロスレス編集は、通常は16px正方形のブロックで動作します。一部のアプリケーションでは制限がありますが、これはマッピングに適しているようです。画像をサイズのピースに最初に紛失してトリミングすることにより、さまざまなズームレベルでタイルを実装できます。 (これは、画像がレンダリングされていないため、迅速です。)これにより、フルツーム用のタイルが得られます。低レベルのズームを作成するには、2x2タイルを組み合わせて、これらを1タイルのサイズまで縮小します。次のレベルでは、4x4タイル、8x8などを使用するたびに、毎回1タイルにスケーリングします。タイルの数が大きすぎるある時点で、ズームしたタイルをベースリソースとして使用することを選択できます。たとえば、ズームレベル8では、256x256タイルが必要です。これは処理するには多すぎるかもしれないので、ズームレベル4から16x16タイルを使用できます。

ウィキペディアは持っています もっと ロスレス編集、およびいくつかの実装ライブラリへのリンク。

ImageMagickは使用してタイル張りをします -タイル. 。それはイメージのより多くの繰り返しですが、特に役立つかもしれません。あなたがすでにそれを使用しているので。ただし、生成されたシームレスなタイリングを意味する場合は、ImageMagickがそれを行うことができるかどうかはわかりません。

gdal GDAL2TILES.pyというスクリプトが付属しています。これは、Googleマップ、OpenLayersなどで使用するタイルをフォーマットするなど、必要なことを正確に実行します。

新しいバージョンがあるようです gdal2tiles 同じように。

aはどうですか Megatexture 効率的なアクセスのためのRツリー付き?どうやら画像128000x128000ピクセルを使用できます。

Jaiはプラットフォームに依存しており、今日の死んだプロジェクトのようです。

オープンソースプログラムを使用することをお勧めします ImageMagick. 。プラットフォームに依存していますが、Jaiと同じプラットフォームで利用できますが、コミュニティの完全なサポートがあります。

ImageMagickについての大きな画像に関するトリックは、それを使用しています」ストリーム「 - の代わりに 変換 指図。ストリームは、画像の関連部分のみを読み取り、抽出された部分を生データとして保存します。次に、小さな生データをJPEGとして保存するために「変換」する必要があります。

例0x0からtile.jpegまでのサイズ800x600のlarge.jpegからタイルを保存する例:

    stream -extract 800x600+0+0 large.jpeg tile.rgb

    convert -depth 8 -size 800x600 rgb:tile.rgb tile.jpeg

(Windowsで実行するときは、「convert」という名前のWindowsコマンドがあるため、ImageMagickのconvert.exeを必ず使用してください。)

Tiff-Imagesのみを使用する場合、Apache サンセラン 正しい選択かもしれません - それは純粋なジャバイメージングLibです。また、JaiにはTIFF用のプラットフォーム独立コーデックが含まれているようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top