GD/Imagick 不保存我的图像
Posted
技术标签:
【中文标题】GD/Imagick 不保存我的图像【英文标题】:GD/Imagick doesn't save my image 【发布时间】:2012-07-28 16:38:40 【问题描述】:我想从 android 发送图像并将其保存在我的服务器中的 php 代码中。因为我需要保护我的服务器,所以我需要重新处理图像,所以我必须使用 GD 或 Imagick。图像以 base64 编码发送。在 php 文件中被解码,如果我使用:
$img=base64_decode($img);
$file = fopen('test.jpg', 'wb');
fwrite($file, $img);
fclose($file);
图像保存在服务器中。如果我使用 Imagick 或 GD,我的图像不会被保存并且 php 文件不会返回任何内容,即使我在它之后插入了一个回显。有什么帮助吗?在 GD 中我使用的是:
$img=base64_decode($img);
$imageinfo = getimagesize($img);
if($imageinfo['mime'] == 'image/gif'
$img = @imagecreatefromjpeg($img);
imagejpeg($img, ""testt.jpg", 80);
在 Imagick 中:
$img=base64_decode($img);
$img = imagick($img); //neither if I use a path of an image saved in my server
//works
$mime = mime_content_type($img);
switch ($mime):
case 'image/jpeg':
$ext = '.jpg';
break;
endswitch;
$img->stripImage();
$img->writeImage(""testt".$ext);
$img->clear();
$img->destroy();
【问题讨论】:
第 2 和第 3 个代码块有语法错误。您是否开启了错误报告? 你的代码充满了语法错误。 我在 imagick 和 gd 代码中看到了一个“额外的内容,但这只是因为我在此处复制时意外添加了。 另外,if($imageinfo['mime'] == 'image/gif'
缺少右括号。当你有 gif 时,为什么要尝试从 jpg 创建?请贴出真实代码
好吧,我的错。我删除了额外的 elseif 并输入了错误的函数。无论如何,重点不是那个。关键是使用最简单的函数,php页面的结果是“”(我知道,因为我在我的android应用程序中看到了php页面回复的所有信息。
【参考方案1】:
imagick 只适用于文件,不幸的是你无法处理它,所以:
$img=base64_decode($img);
$filename = tempnam(sys_get_temp_dir(), 'tempimage_');
$file = fopen($filename, 'wb');
fwrite($file, $img);
fclose($file);
$img = imagick($filename);
$mime = mime_content_type($img);
switch ($mime):
case 'image/jpeg':
$ext = '.jpg';
break;
endswitch;
$img->stripImage();
$img->writeImage("testt".$ext);
$img->clear();
$img->destroy();
理论上,这应该可行。
【讨论】:
纠正双“作为dev-null指出,它不起作用。在我的android应用程序中,我没有得到任何响应,“”,并且图像没有创建它。是因为我使用xampp? 取决于您是否在该 XAMPP 上安装并启用了 imagick 模块 - 您可以在右键菜单 a.f.a.i.r 中找到它。 - 你在 XAMPP 的日志文件中有什么吗? 我重新安装了它,因为我很困惑,我得到了 XAMPP 的最新版本。结果:Windows 上的 Imagick 有效。想像一下 php 没有。我知道我需要在 ext 文件夹中放置一个 php 文件,然后修改 php.ini 并重新启动 apache 服务器,但是该 php 文件的最后一个版本在哪里? 它是一个模块文件,它应该已经是 XAMPP 的一部分。 GD呢? With GD 似乎适用于您的代码。我想调用 imagejpeg 就足够了,我不需要使用临时文件,但我还没有尝试过。无论如何,使用这个功能来防止像ha.ckers.org/blog/20070604/…这样的攻击安全吗?以上是关于GD/Imagick 不保存我的图像的主要内容,如果未能解决你的问题,请参考以下文章
PHP Imagick 类 - 将 JPEG 转换为渐进式 JPEG?隔行不工作
如何使用来自 jQuery Guillotine Plugin 和 Imagick 的数据裁剪图像