更改图像颜色
问题描述:
我学到了一点点的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);
?>