【发布时间】:2014-02-24 13:08:24
【问题描述】:
所以,我有一个脚本用于调整大小、保存 gif 并将此 gif 的预览图像保存在我的服务器上。
这是我的脚本:
public function createImageGif($gif, $x, $y, $w, $h)
{
$image = new Imagick();
$decoded = base64_decode($gif);
$image->readimageblob($decoded);
$image = $image->coalesceImages();
$image_name = uniqid(rand()).'.gif';
foreach ($image as $frame) { //gif creation
$frame->cropImage($w, $h, $x, $y);
$frame->thumbnailImage(117, 135);
$frame->setImagePage(117, 135, 0, 0);
}
$image = $image->deconstructImages();
$image->writeImages('uploads/profiles/'.$image_name, true);
//preview creation
$im = imagecreatefromstring($decoded);
if ($im !== false) {
header('Content-Type: image/gif');
$newimage = imagecreatetruecolor(117, 135);
imagecopyresampled($newimage, $im, 0, 0, $x, $y, 117, 135, $w, $h);
imagegif($newimage, 'uploads/profiles-preview/'.$image_name.'', 100);
imagedestroy($newimage);
imagedestroy($im);
}
return $image_name;
}
所以,$gif 最初是一个长字符串 blob(大约 2 000 000 个字符)。最后,我服务器上的 gif 大小约为 300ko。
此脚本需要 20 多秒才能执行。我有良好的连接和良好的服务器。
如何优化这个脚本?有什么想法吗?
编辑:这是我在 javascript 中创建数据的脚本:
var base64data;
var img = document.createElement('img');
var reader = new window.FileReader();
reader.readAsDataURL(blob);
reader.onloadend = function() {
base64data = reader.result;
img.src = base64data;
}
【问题讨论】:
-
嗨克莱门特。您可以放置一些断点并更接近代码的“挂起”部分。这可能会更容易帮助您改进代码。如果你不能做断点,你可以做一些 echo 1;出口;并找到代码“挂起”的地方。
-
嗯,我的问题不在于我的 PHP 脚本,而在于我的 ajax 请求。我正在尝试使用 jquery ajax 发送一个非常大的字符串(在我编辑的 img.src 中)。所以,问题是ajax
标签: php optimization upload