【问题标题】:Image not appearing PHP图片未出现 PHP
【发布时间】:2014-02-27 03:14:02
【问题描述】:

这是我的计划:

点击提交按钮后。图像必须看起来是被剪切的。

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

这是我的代码:(忽略//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
}

?>

非常感谢您的回复

【问题讨论】:

  • 文件移动是否正确?
  • 是的。它移动正确我可以将上传的图像访问到指定的文件夹。
  • 为什么你有 ."uploaded"?您是否尝试测试它是否已成功移动?
  • @SyntaxLAMP 似乎是什么问题。为什么sheared 图像没有出现?
  • 去掉 ."uploaded"。将这一行设为“if(move_uploaded_file($image_tmp,$image_file))

标签: php


【解决方案1】:

虽然我非常熟悉 PHP,但我从未使用过 Imagick。

看起来您正试图回显 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 进行 base 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

【讨论】:

  • 我有一个包含上传目录的变量,文件名写为$UPLOADDIR = "images/";$image = $value['name']; 在我的情况下,我将它们分开,这样我可以很容易地注意到要上传的文件是剪切与否,所以在文件夹中,将有2个文件包含原始图像和剪切的一个。
  • 所以你有一个原始图像文件路径的变量。您需要一个用于剪切文件名路径的变量。然后在您的 img 标签中,您的 src 属性将剪切文件路径变量作为其值。
  • 你能检查一下这是否正确吗? $editedShear = ($UPLOADDIR.'sheared-'.$image);
  • 是的,这是准确的。
  • 我得到了预期的输出。谢谢你。 :)
猜你喜欢
  • 2020-09-27
  • 1970-01-01
  • 2016-09-19
  • 2013-09-07
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多