Bild kacheln

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Vorsicht Anfänger
Beiträge: 95
Registriert: 15.05.2006 11:30:03

Bild kacheln

Beitrag von Vorsicht Anfänger » 21.07.2009 14:11:58

Hallo Zusammen,

Ich moechte gerne vier Bilder zu einem Bild gekachelt zusammenfuegen. Sowas ist moeglich mit montage aus dem imagemagik Paket. Allerdings ist das zu langsam, zumal ich mehrere tausend Bilder habe.

Kennt jemand von Euch eine schnellere Alternative?

Vielen Dank,
Ralf

uname
Beiträge: 12481
Registriert: 03.06.2008 09:33:02

Re: Bild kacheln

Beitrag von uname » 21.07.2009 15:05:22

Das OpenStreetMap-Projekt bietet die Möglichkeit z.B. kostenlose DIN-A0-Landkarten auf OSM-Kartenbasis zu generieren. Hierbei werden Kacheldaten der OSM-Welt zusammengebaut.

http://wiki.openstreetmap.org/wiki/DE:Bigmap

Der Programmcode sieht in etwa so aus. Vielleicht ein Ansatz. Das Beziehen der Kacheln kannst du sparen, da du wahrscheinlich keine Landkarten benötigst. Aber vielleicht kannst du den Rest irgendwie verwerten. Die Schleifen gehen dann jeweils nur über 2 und nicht 22 Einträge. Mag auch nur bei PNG gehen, bin mir nicht sicher.

Code: Alles auswählen

#!/usr/bin/perl
use strict;
use LWP;
use GD;

my $img = GD::Image->new(5632, 5632, 1);
my $white = $img->colorAllocate(248,248,248);
$img->filledRectangle(0,0,5632,5632,$white);
my $ua = LWP::UserAgent->new();
$ua->env_proxy;
for (my $x=0;$x<22;$x++)
{   
    for (my $y=0;$y<22;$y++)
    {   
        my $url = sprintf("http://tah.openstreetmap.org/Tiles/tile/15/%d/%d.png"
,  $x+17066,$y+10822);
        print STDERR "$url\n";
        my $resp = $ua->get($url);
        die $resp->status_line unless $resp->is_success;
        my $tile = GD::Image->new($resp->content);
        next if ($tile->width == 1);
        $img->copy($tile, $x*256,$y*256,0,0,256,256);
    }
}
binmode STDOUT;
print $img->png();

Antworten