2016-02-04 20 views
6

Mam dwa obrazy (obie mapy) jedna to zwykła mapa, a druga to mapa z pinami.Odejmij dwa obrazy, aby opuścić wynik - PHP

Obraz jeden

Image One

Obraz Dwa

Image Two

Próbuję odjąć je od siebie, więc pozostaje mi tylko jak szpilki przezroczysty png.

Odniosłem pewien sukces i udało mi się uzyskać szpilki jako swój własny obraz, problem polega na tym, że kolory nie są całkiem poprawne (patrz rysunek 3).

Obraz Trzy

Image Three

Używam Imagick to zrobić i mój kod jest poniżej

<?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; 

Czy ktoś wie jak mogę uporządkować/dostrojenia tego, aby kolory pasują do oryginalnego obrazu?

Dzięki!

+0

Po raz pierwszy widzę to pytanie - * odejmowanie obrazu *. –

Odpowiedz

1

Odejmuje się również od szpilek, dlatego wyglądają inaczej.

nie jestem pewien jak wykonać to w Imagick, ale to, co chcesz zrobić, to:

Odejmij map z mapy z pinami, utworzyć maskę (umieścić pin pikseli 1, były mapę pikseli 0), a następnie pomnóż to z mapą za pomocą pinezek. Zostaje ci wtedy szpilka.

To może pomóc: http://www.imagemagick.org/script/fx.php

1

udało mi się uzyskać to do pracy przy użyciu techniki maskowania wspomniany przez Prosiaczka i wędrówki-wojownika i z pomocą tej post oraz

W sprawa ktoś potrzebuje kod jest tutaj:

<?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; 

Maska wygląda tak mask

a ostateczna moc jak tak

enter image description here

Mam nadzieję, że to pomoże ktoś, kto jej potrzebuje!

Powiązane problemy