2017-01-05 8 views
0

Я расскажу немного о своей ситуации.Прозрачное изображение на прозрачном изображении PHP

У нас есть остров с городами. Это может быть:

  • Владелец моего альянса
  • Принадлежит врагом
  • Принадлежит никем (бесплатно)

Таким образом, мы получили 3 «города» Прообразы и островной образ, выглядит следующим образом:

Island

No owner

Alliance

Enemy

Теперь мы хотим поставить эти города, изображения на острове изображения. Например, мы помещаем город, принадлежащий никому на острове, как это:

<?php 
// Get image 
$im = imagecreatefrompng('island.png'); 
imagealphablending($im,true); 

// Get our "Free-city-position" image 
$stamp = imagecreatefrompng('free.png'); 

$pos_x = 190 - 15; // Position X = 190 - the half of the free.png image = 30/2 = 15 
$pos_y = 225 - 15;// Position Y = 225 - the half of the free.png image = 30/2 = 15 

imagealphablending($stamp,true); 
imagecopy($im, $stamp, $pos_x, $pos_y, 0, 0, imagesx($stamp), imagesy($stamp)); 

// Output image 
header('Content-type: image/png'); 
imagepng($im); 
imagedestroy($im); 
?> 

И теперь наша проблема: образ города не прозрачен на острове изображении! Он выглядит так: Island with city

Я думал, что imagealphablending должен сделать трюк, но, к сожалению, этого не делает.

Как мы можем получить изображение прозрачного города на острове?

ответ

0

Взято из комментария PHP на GD функции:

Если вы пытаетесь скопировать Transparant изображение на другое изображение, вы могли бы предположить, что вы должны использовать функцию ImageAlphaBlending для образ, который имеет расширение прозрачность, исходное изображение. В действительности вы должны использовать функцию ImageAlphaBlending для целевого изображения. В основном это говорит: «Сделайте указанное изображение равным прозрачность».

+0

Это означает, что я добавить 'функцию imagealphablending' над' заголовка (...) 'в' $ im'? К сожалению, это не работает ... –

+0

Нет, это означает, что только установите изображение в фоновое изображение, а не изображение переднего плана. См. Http://php.net/manual/en/function.imagealphablending.php - 2-й комментарий – Eric

+0

Но это не решение. Когда я меняю изображение на JPG (JPEG) изображение, оно работает. Есть ли решение для изображений PNG? –

0

Попробуйте так:

#!/usr/bin/php -f 
<?php 
// Read island image and get dimensions 
$island=imagecreatefrompng("island.png"); 
$w_island=imagesx($island); 
$h_island=imagesy($island); 

// Read city image and get dimensions 
$city= imagecreatefrompng("city.png"); 
$w_city=imagesx($city); 
$h_city=imagesy($city); 

// Create output image 
$result=imagecreatetruecolor($w_island,$h_island); 
imagesavealpha($result,true); 
$transparent=imagecolorallocatealpha($result, 0, 0, 0, 127); 
imagefill($result, 0, 0, $transparent); 

// Splat island onto transparent background 
imagecopy($result, $island, 0, 0, 0, 0, $w_island, $h_island); 
// Splat city ontop 
imagecopy($result, $city, 100, 280, 0, 0, $w_city, $h_city); 
imagepng($result,"result.png"); 
?> 

enter image description here