我正在显示一个图像,其中URL保存在数据库中,现在我想在不满足条件时将其显示为黑色
网址
$url = '/images/'.$row['sprite'].'.png';
然后以正常图像标签显示
我想要的是如果$ row ['normal'] == 0然后将图像变黑,使其成为轮廓,否则显示正常图像
经过一番搜索,我发现了imagefilter,但我不知道如何应用它,因为我发现的例子没有显示当页面上有其他内容时如何应用它
或者在photoshop中制作剪影会更好,因为它们有800多个,但页面上最多只有两个
答案 0 :(得分:0)
首先,您需要将GD Image Library加载到您的服务器。
如果图像类型不同,请使用imagecreatefrompng定义图像路径并创建图像对象,然后选择正确的图像。
$image_path = $_SERVER['DOCUMENT_ROOT']."/assets/img/horse1.png";
$image_obj = imagecreatefrompng($image_path);
现在,如果您提供条件,我们需要应用过滤器。使用imagefilter功能将任何过滤器应用于图像。在这个示例中,IMG_FILTER_GRAYSCALE足够公平,或者您可以使用函数手册进行更改。
if($row['normal'] == 0) {
$op_result = imagefilter($image_obj,IMG_FILTER_GRAYSCALE);
}
最后,我们需要使用imagepng函数将图像保存到服务器。
imagepng($image_obj,$_SERVER['DOCUMENT_ROOT']."/assets/img/horse1_black.png");
检查下面的完整代码我强烈建议您不要为每个用户创建黑色图像。如果您的图像已存在于您的服务器中,则只显示它而不进行任何创建。
$image_path = $_SERVER['DOCUMENT_ROOT']."/assets/img/horse.png";
$black_image_path = $_SERVER['DOCUMENT_ROOT']."/assets/img/horse_black.png";
if($row['normal'] == 0) {
if(file_exists($black_image_path)){
return $black_image_path; //if your black image is already exist just return and use it.
}
else {
$image_obj = imagecreatefrompng($image_path); //create a image object from a path
$op_result = imagefilter($image_obj,IMG_FILTER_GRAYSCALE); //applying grayscale filter to your image object.
if($op_result) {
imagepng($image_obj,$black_image_path); //save the image to defined path.
return $black_image_path;
}
else {
return "Error Occured.";
}
}
}