更改图像颜色

问题描述:

我学到了一点点的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,画布或任何其他)?

图像的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脚本,所以你可以使用它为每一个颜色。

imagepng将输出png文件内容直接,如果你不使用filename参数,如:

imagepng($im); 

比,你可以,如果你离开了第二个文件名参数要求如

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

只创建照片的视图(不创建一个新的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); 
?>