PHP图像更改为剪影

时间:2016-12-02 18:15:52

标签: php

我正在显示一个图像,其中URL保存在数据库中,现在我想在不满足条件时将其显示为黑色

网址

$url = '/images/'.$row['sprite'].'.png';

然后以正常图像标签显示

我想要的是如果$ row ['normal'] == 0然后将图像变黑,使其成为轮廓,否则显示正常图像

经过一番搜索,我发现了imagefilter,但我不知道如何应用它,因为我发现的例子没有显示当页面上有其他内容时如何应用它

或者在photoshop中制作剪影会更好,因为它们有800多个,但页面上最多只有两个

1 个答案:

答案 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.";
        }
    }
}