2016-02-04 8 views
6

Ich habe zwei Bilder (beide Karten) ist eine einfache Karte und man ist eine Karte, die Pins hatte.Subtrahieren Sie zwei Bilder, Ergebnis zu hinterlassen - PHP

Bild ein

Image One

Bild Zwei

Image Two

Ich versuche, um sie voneinander zu subtrahieren, so dass die Stifte mit nur links, wie ich bin ein transparenter Png.

Ich hatte Erfolg damit und habe es geschafft, die Pins als ihr eigenes Bild zu bekommen, das Problem ist, dass die Farben nicht ganz stimmen (siehe Bild 3).

Bild Drei

Image Three

Ich Imagick mit, dies zu tun und mein Code unter

<?php 

// load in the base image into Imagick 
$imageOne = new Imagick('images/base-map.png'); 
$imageTwo = new Imagick('images/pins/location-7.png'); 

$imageOne->compositeImage($imageTwo, Imagick::COMPOSITE_DIFFERENCE, 0, 0); 
$imageOne->paintTransparentImage($imageOne->getImagePixelColor(0, 0), 0, 5000); 

header('Content-Type: image/png'); 

echo $imageOne; 

Wer weiß, wie ich ordentlich kann/zwicken dies zu machen Farben entsprechen dem Originalbild?

Danke!

+0

Zum ersten Mal sehe ich diese Frage - * Bildsubtraktion *. –

Antwort

1

Sie subtrahieren auch von den Pins, deshalb sehen sie anders aus.

Ich bin mir nicht sicher, wie dies in Imagick auszuführen, aber was wollen Sie tun:

subtrahieren Karte von Karte mit Pins, eine Maske erstellen dann (Pin Pixel 1, ehemaliger Karte Pixel 0 gesetzt) multiplizieren Sie dies mit der Karte mit Pins. Dann sind Sie mit den Pins verlassen.

helfen Dies könnte: http://www.imagemagick.org/script/fx.php

1

Ich habe dies durch Piglet erwähnt unter Verwendung der Maskentechnik arbeiten geschaffen zu bekommen und Wanderkrieger und mit Hilfe von diesen post auch

In Fall jemand braucht es sonst der Code ist hier:

<?php 

$base = new Imagick('images/base-map.png'); // blank map 
$mask = $base; // copy of this to create the mask with 
$imageTwo = new Imagick('images/pins/location-7.png'); // image with pins on it 

// create the mask 
$mask->compositeImage($imageTwo, Imagick::COMPOSITE_DIFFERENCE, 0, 0); 
$mask->paintTransparentImage($mask->getImagePixelColor(0, 0), 0, 5000); 
$mask->compositeImage($mask, Imagick::COMPOSITE_DIFFERENCE, 0, 0); 

// remove the mask from the image with pins 
$imageTwo->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA); 
$imageTwo->paintTransparentImage('#000', 0, 5000); 

header('Content-Type: image/png'); 
echo $imageTwo; 

die Maske sieht aus wie so mask

und die endgültige Ausgabe wie so

enter image description here

Hoffentlich wird dieser helfen jemand anderes, der es braucht!

Verwandte Themen