在图像PHP上保存正确的旋转

时间:2014-05-27 14:10:38

标签: php html image image-processing image-manipulation

我是php的新手,直到现在我一直在用我有限的知识,阅读和谷歌的帮助创建一个网站。我已经谈到了上传图片的观点,我真的很想了解最佳做法,而不是让事情变得非常低效。

我的项目网站允许用户上传图像(设置了多个标记),一旦上传(并显示在另一页面上),这些图像中的一些图像不会以正确的旋转显示。我已经阅读了exif-read-data(http://www.php.net/manual/en/function.exif-read-data.php)。 在我的网站上,我访问图像标题,找到方向...然后使用一些代码(我发现解决了iphone的问题)我将每个图像加载到内存中,旋转并保存。

我的php页面包含允许用户通过单个文件上传按钮添加多个图像的表单。表单操作将它定向到process_post.php,它处理从db插入到页面重定向的所有内容。

代码段(仅适用于图片部分)

//put all the uploaded images into an array 
$files=array();
$fdata=$_FILES['upfile1'];
for($i=0;$i<count($fdata['name']);++$i){
    $files[]=array(
     'name'    =>$fdata['name'][$i],
     'type'  => $fdata['type'][$i],
     'tmp_name'=>$fdata['tmp_name'][$i],
     'error' => $fdata['error'][$i], 
     'size'  => $fdata['size'][$i]  
    );
}

foreach ($files as $file) {
    if ($file['error'] == 0) {
        $directory = 'C:\inetpub\wwwroot\site\form_uploads\\';
        $dbimagepath = 'form_uploads/';
        $filename = $file['name'];
        //ensure the filename is unique//
        while (file_exists($directory . $filename)){$filename = mt_rand() . $filename;}

        $fullpath = $directory . $filename;
        $image = imagecreatefromstring(file_get_contents($file['tmp_name']));
        $exif = exif_read_data($file['tmp_name']);
        if (!empty($exif['Orientation'])){
            switch($exif['Orientation'])
            {
                case 3: // 180 rotate left
                    $image=imagerotate($image, 180, -1);
                    break;
                case 6: // 90 rotate right
                    $image=imagerotate($image, -90, -1);
                    break;
                case 8:    // 90 rotate left
                    $image=imagerotate($image, 90, -1);
                    break;
            }
        }
        if (imagejpeg($image, $fullpath, 100)){
            //next database insert

效率 既然图像上传大小太大(即我使用的是5x 9MB图像并且速度很慢)是否有更好的方法来实现这一结果,或者当我开始使用我的托管空间时速度是否会提高?

真的很感谢一些专业的反馈,谢谢大家!

0 个答案:

没有答案