空白图像imagecreatefromjpeg

时间:2015-10-14 12:47:38

标签: php image image-processing

我有以下功能

function getImage($imageHash,$script) {



        $imageurl = "http://www.MYURL.com/images/images/ABImage_clock_4.jpg";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $imageurl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
        $data = curl_exec($ch);
        curl_close($ch);

        $img = imagecreatefromjpeg($data);

        // draw lines

        $num_lines = rand(6,10);


            for ($i = 0; $i <= $num_lines; $i++)
            {
        $color = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));

        imageline($img, rand(5,95), rand(5,95), rand(5,95), rand(5,95), $color);
    }

    imagefilter($img, IMG_FILTER_COLORIZE, rand(1, 50), rand(1, 50), rand(1, 50));

    imagejpeg($img, '', 30);
    imagedestroy($img);

    }

但似乎图像不会被创建。图像位于根文件夹中,因为您可以看到images / images文件夹。但没有任何东西可以使图像显而易见。

enter image description here

我该如何解决这个问题?

更新:

来自$data的转储 enter image description here

UPDATE2:

enter image description here

行: 42:`

$img = imagecreatefromjpeg($data);

51:

$color = imagecolorallocate($img, rand(0,255), rand(0,255),` rand(0,255));

和58&amp; 59:`

    imagejpeg($img, '', 30);
imagedestroy($img);

1 个答案:

答案 0 :(得分:0)

[这不是答案,但我不能在评论部分写这个。]

我认为如果不知道如何调用此代码,就无法回答。

一些想法:

1)首先在某处(您的浏览器,文件,等等)转储$ data,以查看您的curl调用是否按预期工作。

2)(imagejpeg($ img,&#39;&#39;,30);)中的第二个参数是一个空字符串?这应该包含您要保护图像的位置的路径。还有名字。

(海报希望它直接输出到浏览器)

编辑:

好的,数据是通过curl获取的。好。

现在直接将其输出到浏览器,对吗?

在这种情况下,请确保使用正确的mime类型。

所以,从您的HTML:

<img src="http://www.yoursite.com/myImageGenerator.php">

并确保在php脚本中添加正确的标题。

header('Content-Type: image/jpeg');

另外请确保您不输出任何其他内容。

===================

下一次编辑(因为这些评论太小)

情况:您现在有一张图片显示您的图片缺失。

当然,这根本没有帮助。 ;-)

您是否检查过脚本引发的任何错误?调试图像创建脚本可能很困难,因为无法在屏幕上看到错误。

您可以通过两种方式执行此操作:

1)检查错误日志。使用phpinfo()http://php.net/manual/en/function.phpinfo.php并查找错误日志的位置,并查看它。

2)我更喜欢这个:只需在浏览器中直接调用您的图像创建脚本即可。确保在PHP中更改mimetype。现在,您可以看到浏览器在尝试获取图像和任何错误时收到的输出。

================================

在这里,您将看到一个基于Spongebob的工作示例。 (我对使用过的图片没有权利。希望我这样做。)

我希望你可以用它来修改你自己的。请务必在www.php.net上查找您不了解的功能。

<?php
    // call this script with test.php?produceimage=Y to return only image
    $bPictMode = isset($_GET["produceimage"]);

    $imageurl = "http://vignette4.wikia.nocookie.net/unanything/images/6/6a/Spongebob.jpg";

    if ($bPictMode){

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $imageurl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 
        $data = curl_exec($ch);
        curl_close($ch);

        $img = imagecreatefromstring ($data);

        // draw lines
        $num_lines = rand(6,10);
        for ($i = 0; $i <= $num_lines; $i++){
            $color = imagecolorallocate($img, rand(0,255), rand(0,255), rand(0,255));
            imageline($img, rand(5,95), rand(5,95), rand(5,95), rand(5,95), $color);
        }
        imagefilter($img, IMG_FILTER_COLORIZE, rand(1, 50), rand(1, 50), rand(1, 50));

        imagejpeg($img, NULL, 30);
        imagedestroy($img);
    } else {
        $imgURL = "test.php?produceimage=Y";
?>
<!DOCTYPE html>
<html>
 <head>
  <title>jpg generator</title>
 </head>
 <body>
  Do you see him? (image-url = <?php echo $imgURL; ?>)<br>
  <img src="./<?php echo $imgURL; ?>" style="border: 3px solid blue;">
  <hr>  
 </body>
</html>
<?php   
    }
?>