图像没有出现PHP

时间:2014-02-27 03:14:03

标签: php

这是我的计划:

点击提交按钮。图像必须看起来很剪切。

但就我而言,它没有按计划出现。

这是我的代码:(只需忽略//

之后的//this is where...
<?php

 if(isset($_POST['Submit'])){

    // loop through the uploaded files
    foreach ($_FILES as $key => $value) {

        $image_tmp = $value['tmp_name'];
        $image_type=$value['type'];
        $image = $value['name'];
        $image_file = "{$UPLOADDIR}{$image}";

        //check if there's existing file name
        if ($image  != 0){
            echo 'File Already Exists!';
        } else {
            // move the file to the permanent location
            if(move_uploaded_file($image_tmp,$image_file)){
                // this is where the shearing and displaying part goes

                $shear = new Imagick($image_file);
                $shear ->shearImage('grey', 10, 5);
                $shear ->writeImage($UPLOADDIR.'sheared-'.$image);
                echo "<div style='float:left;margin-right:10px'>
                         <img src='{$shear}' alt='file not found' /></br>
                     </div>";
            } else {
                echo "<h1>image file upload failed, image too big after compression</h1>";
            }
        }
    } // end foreach
}

?>

非常感谢您的回复

1 个答案:

答案 0 :(得分:0)

只是免责声明我从未使用过Imagick,尽管我非常熟悉PHP。

看起来你正试图回应出类Imagick的一个实例。如果implementation of Imagickmagic method for __toString(),这将正常工作。从我对PHP手册的评论看来,Imagick没有这种方法。

将字符串输出到HTML图像标记时,您需要src属性值为特定目录和文件名或base 64编码图像。

您可以使用的一个选项是获取文件blob并使用file_put_contents()保存图像。在图像src中,您将放置文件的名称。

 if(move_uploaded_file($image_tmp,$image_file)) {


    $shear = new Imagick($image_file);
    $shear->shearImage('grey', 10, 5);
    $shear->writeImage($UPLOADDIR.'sheared-'.$image);
    $data = $shear->getImageBlob();

    file_put_contents('test.png', $data); 

    echo "<div style='float:left;margin-right:10px'>
           <img src='test.png' alt='file not found' /></br>
        </div>";

}

另一种可能性是您可以在单独的变量中分配图像文件路径并输出。

 if(move_uploaded_file($image_tmp,$image_file)) {

    $shear = new Imagick($image_file);
    $shear->shearImage('grey', 10, 5);
    $img_path = $UPLOADDIR.'sheared-'.$image;
    $shear->writeImage($img_path);

    echo "<div style='float:left;margin-right:10px'>
           <img src='{$img_path}' alt='file not found' /></br>
        </div>";

}

第三个选项是你可以对blob进行64位编码并直接显示它而不是写入文件。

 if(move_uploaded_file($image_tmp,$image_file)) {

    $shear = new Imagick($image_file);
    $shear->shearImage('grey', 10, 5);
    $img_path = $UPLOADDIR.'sheared-'.$image;
    $shear->writeImage($img_path);
    $data = base64_encode($shear->getImageBlob());

    echo "<div style='float:left;margin-right:10px'>
           <img src='data:image/jpg;base64,{$data}' alt='file not found' /></br>
        </div>";

}

请查看此问题以获取更多信息PHP-Imagemagick image display