在图像上绘制形状并将其保存在PHP中

时间:2015-11-07 10:23:40

标签: php html

我试图从我服务器中的某个位置读取图像,然后在其上绘制线条,然后覆盖该位置的图像。

我的代码如下:

function drawShapes($src_path, $json)
{       
    echo "---inside draw Sharpes-------";
    $x1= $json['x1'];
    $y1= $json['y1'];
    $x2= $json['x2'];
    $y2= $json['y2'];
    $x3= $json['x3'];
    $y3= $json['y3'];
    $x4= $json['x4'];
    $y4= $json['y4'];

    $type = exif_imagetype($src_path);
    $allowedTypes = array( 
        1,  // [] gif 
        2,  // [] jpg 
        3,  // [] png 
    ); 
    if (!in_array($type, $allowedTypes)) { 
        return false; 
    } 
    switch ($type) { 
        case 1 : 
            $im = imageCreateFromGif($src_path); 
        break; 
        case 2 :    
            $im = imageCreateFromJpeg($src_path);               
        break; 
        case 3 : 
            $im = imageCreateFromPng($src_path); 
        break; 
    }  

    if (!$im)
        return false;

    imagesetthickness($im, 5);
    $color = imagecolorallocate($im, 255, 255, 255);
    echo $color;

    imageline($im, $x1, $y1, $x2, $y2, $color);
    imageline($im, $x2, $y2, $x3, $y3, $color);
    imageline($im, $x3, $y3, $x4, $y4, $color);
    imageline($im, $x4, $y4, $x1, $y1, $color);

    header("Content-type: image/jpeg");
    imagejpeg($im,$src_path);
    imagedestroy($im);
}

这里$ src_path =" uploads / case.jpg" - uploads是我解决方案中的一个文件夹& case.jpg是图像文件名。 但我得到图像缺失图标作为输出。我做错了什么?

它有什么解决方案?谢谢。

1 个答案:

答案 0 :(得分:1)

在发送标题之前,您正在回显数据。

如果您要覆盖该位置的图像,然后在浏览器中显示它,也许您可​​以使用此调整:

<?php
function drawShapes($src_path, $json)
{
    //echo "---inside draw Sharpes-------";
    $x1= $json['x1'];
    $y1= $json['y1'];
    $x2= $json['x2'];
    $y2= $json['y2'];
    $x3= $json['x3'];
    $y3= $json['y3'];
    $x4= $json['x4'];
    $y4= $json['y4'];

    $type = exif_imagetype($src_path);
    $allowedTypes = array(
        1,  // [] gif
        2,  // [] jpg
        3,  // [] png
    );
    if (!in_array($type, $allowedTypes)) {
        return false;
    }
    switch ($type) {
        case 1 :
            $im = imageCreateFromGif($src_path);
            break;
        case 2 :
            $im = imageCreateFromJpeg($src_path);
            break;
        case 3 :
            $im = imageCreateFromPng($src_path);
            break;
    }

    if (!$im)
        return false;

    imagesetthickness($im, 5);
    $color = imagecolorallocate($im, 255, 255, 255);
    //echo $color;

    imageline($im, $x1, $y1, $x2, $y2, $color);
    imageline($im, $x2, $y2, $x3, $y3, $color);
    imageline($im, $x3, $y3, $x4, $y4, $color);
    imageline($im, $x4, $y4, $x1, $y1, $color);

    imagejpeg($im,$src_path);
    imagedestroy($im);

    $fp = fopen($src_path, 'rb');
    header("Content-Type: image/jpeg");
    header("Content-Length: " . filesize($src_path));
    fpassthru($fp);
    exit;
}