这是我的计划:
点击提交按钮。图像必须看起来很剪切。
但就我而言,它没有按计划出现。
这是我的代码:(只需忽略//
//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
}
?>
非常感谢您的回复
答案 0 :(得分:0)
只是免责声明我从未使用过Imagick,尽管我非常熟悉PHP。
看起来你正试图回应出类Imagick的一个实例。如果implementation of Imagick有magic 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