2017-11-14 5 views
-2

Ich möchte in der Lage sein, Radardaten von Gif zu extrahieren, die jede Stunde auftritt.Extrahieren bestimmter Teile auf Bild mit PHP

Dies ist ein Beispiel für ein gif: enter image description here

Daten Farben nach Daten Legende auf der rechten Seite variieren. Ich möchte auch, dass Ländergrenzen nicht sichtbar sind, da gif in der Reihenfolge ertrinkt: Basisschicht, Radardatenschicht, Borders Layer - ich brauche nur reine Radardaten.

Jeder Vorschlag oder Lösung wird sehr geschätzt!

+0

Bitte zeigen Sie, wie das Ergebnis aussehen wird. –

+0

Tut mir leid, ich war nicht im Büro. Danke für deine große Hilfe, ich habe nur die Antwort überprüft! – mycupoftea

Antwort

1

Alle Radardaten scheint sehr gesättigt zu sein, so könnte man die Sättigung auf einer eigenen Ebene und Schwellen es bei etwa 85% und verwenden extrahieren, dass als Opazität wie folgt aus:

convert radar.gif \ 
    \(+clone -colorspace hsl -channel S -separate -threshold 85% \) \ 
    -compose copyopacity -composite result.gif 

die dies gibt Ihnen, wo alle ungesättigten Farben sind jetzt transparent:

enter image description here

Wie Sie sehen können, ist es richtig aufzunehmen und alle Farben in der „Schlüssel“ auf der rechten Seite zu halten, aber es nimmt auch auf der linken Seite der Malve das Bild. Lassen Sie uns diesen speziellen Ton transparent machen:

convert radar.gif \ 
    \(+clone -colorspace hsl -channel S -separate -threshold 85% \) \ 
     -compose copyopacity -composite        \ 
     -fuzz 10% -fill none -opaque "rgb(160,153,255)" result.gif 

, die dies gibt: Jetzt

enter image description here

, nehme ich, dass wir auch von der kränklich gelb loswerden müssen:

convert radar.gif \ 
    \(+clone -colorspace hsl -channel S -separate -threshold 85% \) \ 
    -compose copyopacity -composite        \ 
    -fuzz 10% -fill none           \ 
    -opaque "rgb(160,153,255)"         \ 
    -opaque "rgb(254,251,175)" result.gif 

Schließlich , schneiden wir nach oben links 480x480 px:

convert radar.gif -crop 480x480+0+0 +repage \ 
    \(+clone -colorspace hsl -channel S -separate -threshold 85% \) \ 
    -compose copyopacity -composite        \ 
    -fuzz 10% -fill none           \ 
    -opaque "rgb(160,153,255)"         \ 
    -opaque "rgb(254,251,175)" result.gif 

enter image description here

+0

Das ist großartig! Tnx! Ich denke, das ist ImageMagick, ich wollte mir Dinge näher bringen und reines PHP verwenden, aber ich denke, ich werde IM überprüfen müssen, da ich nichts mit PHP herausgefunden habe. Aber was ich hier tun möchte, ist, den Rand, der hier am Ende blau wurde, zu entfernen. Wenn es möglich ist, Farben zu interpolieren, wo früher Grenzen waren, ist dieser Bereich jetzt weiß. – mycupoftea

+0

Sie können die Grenze auf die gleiche Weise entfernen, wie ich die Malve und die gelbe entfernt habe.Erhalte einfach seine RGB-Farbe und füge ein weiteres "-opakes" rgb (0,89,129) "' in die Liste ein. –

+0

Sie können ImageMagick mit PHP verwenden - suchen Sie einfach in StackOverflow nach '[imagick]' –

0

Sie können 'imagecreatefromgif' verwenden, um das GIF abzurufen und es als ein GD-Objekt zu laden (erfordert GD aktiviert in der php.ini). Von dort aus können Sie einige Tricks zur Bildbearbeitung verwenden, um das, was Sie vom GIF erwarten, zu reduzieren. Die PHP.net-Site hat ein Beispiel dafür, was Sie damit machen können.

0

Vor allem, wenn Sie nur in den durch Farben codierten Informationen interessiert sind, die wir gegenwärtig in einem spezifischen Rahmen des gif lesen, hier, wie Sie nur ein Rahmen, wenn dieser gif zugreifen:

Accessing gif frames

Danach, wenn Sie ein Rechteckbild haben, können Sie Pixel für Pixel als Matrix mit der php-Funktion 'imagecolorat' scannen.

Verwandte Themen