2013-04-07 150 views
0

我學到了一點點的php的img_filter_colorize()。我想讓用戶選擇爲圖像選擇顏色。例子是here更改圖像顏色

我的代碼是:

<?php 
header('Content-type: image/png'); 
$im = imagecreatefrompng('flower.png'); 
imagefilter($im, IMG_FILTER_GRAYSCALE); 
imagefilter($im, IMG_FILTER_CONTRAST, 255); 
imagefilter($im, IMG_FILTER_NEGATE); 
imagefilter($im, IMG_FILTER_NEGATE); 
imagefilter($im, IMG_FILTER_COLORIZE, 255, 0, 0); 
imagepng($im, 'flower1.png'); 
?> 

此代碼創建紅色表示一個新的形象,但在這裏我並不想創建一個圖像,僅在屏幕顯示。

例如,如果用戶選擇紅色按鈕圖像更改爲紅色等。

這是可以實現的嗎? 有沒有其他的方式來做到這一點(JavaScript,畫布或任何其他)?

回答

0

圖像的imagepng()調用它只會輸出圖像的字節,它不會被保存到一個文件,所以你可以在<img src="">裏面使用這個腳本的url,它應該會顯示正常。

然而因爲每次圖像被下載的計算需要重新運行,如果你有一個固定的調色板,它可能更好地預先生成的圖像或至少緩存,這將是與您的服務器資源的真正浪費生成的版本。

對於面向用戶的部分,當用戶點擊「紅色」按鈕時,您可能希望使用javascript更改瀏覽器內部的DOM。沿此線的東西:

<img src="the_default_color.png" id="image"> 
<button id="make_it_red">Make it red</button> 
<script> 
document.getElementById('make_it_red').onclick = function(){ 
    document.getElementById('image').src = 'path_to_your_image_generator_php_script.php'; 
}; 
</script> 

你可能想和RGB值參數的PHP腳本,所以你可以使用它爲每一個顏色。

0

imagepng將輸出png文件內容直接,如果你不使用filename參數,如:

imagepng($im); 

比,你可以,如果你離開了第二個文件名參數要求如

<img src="http://your-shost/yourimagescript.php" /> 
0

只創建照片的視圖(不創建一個新的flower1.jpg)

<?php 
echo '<img src="photo.php" height="42" width="42">'; 
?> 

,並在新的文件:photo.php

<?php 
header('Content-type: image/png'); 
$im = imagecreatefrompng('flower.png'); 
imagefilter($im, IMG_FILTER_GRAYSCALE); 
imagefilter($im, IMG_FILTER_CONTRAST, 255); 
imagefilter($im, IMG_FILTER_NEGATE); 
imagefilter($im, IMG_FILTER_NEGATE); 
imagefilter($im, IMG_FILTER_COLORIZE, 255,0, 0); 
imagejpeg($im); 
imagedestroy($im); 
?>