如何在php中丢失清晰度来调整图像大小

时间:2015-05-06 05:33:51

标签: php html image

我在php上传图片,上传时我想调整四个像素(800 * 700,620 * 310等等)的图像。为此,我尝试下面的代码,因为我得到精确的图像像素,但我的图像质量不好。它没有调整质量,我附上我的代码请帮我解决这个问题 谢谢

PHP:

if(isset($_FILES['file_img']['name']))
    {
        for($i=0; $i<count($_FILES['file_img']['name']); $i++) 
        {
               $tmpFilePath = $_FILES['file_img']['tmp_name'][$i];
               if ($tmpFilePath != "")
               {    
                   $path = "floorplan/"; // create folder 
                   $floorPlanName = $_POST['file_name'][$i];
                   $name = $_FILES['file_img']['name'][$i];
                   $filename = stripslashes($_FILES['file_img']['name'][$i]);
                    $extension = getExtension($filename);
                    $extension = strtolower($extension);


                    if($extension=="jpg" || $extension=="jpeg" )
                    {
                    $src = imagecreatefromjpeg($tmpFilePath);
                    }

                    else 
                    {
                    $src = imagecreatefromgif($tmpFilePath);
                    }
                    list($width,$height)=getimagesize($tmpFilePath);


                    $newwidth=1000;
                    $newheight=($height/$width)*$newwidth;
                    $tmp=imagecreatetruecolor($newwidth,$newheight);


                    $newwidth2=312;
                    $newheight2=209;
                    $tmp1=imagecreatetruecolor($newwidth2,$newheight2);


                    imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);



                    imagecopyresampled($tmp1,$src,0,0,0,0,$newwidth2,$newheight2,$width,$height);




                    $filename = "floorplan/".$_FILES['file_img']['name'][$i];



                    $filename1 = "floorplan/vs". $_FILES['file_img']['name'][$i];





                    imagejpeg($tmp,$filename,100);

                    imagejpeg($tmp1,$filename1,100);

                    imagedestroy($src);
                    imagedestroy($tmp);
                    imagedestroy($tmp1);

                    $paname = $filename;

                   if(move_uploaded_file($_FILES['file_img']['tmp_name'][$i], $filename)) 
                   { 
                    $query=mysql_query("INSERT INTO `floor_plan` (project_id, floorplan_name, floorplan_img, vs_img, created_on) VALUES('$getId', '$floorPlanName', '$paname', '$filename1', '$createdOn' )");
                   }
             }
        }

    }

HTML:

<div class="col-md-8">
                            <div class="form-group">
                                <label>Choose file</label>
                                <input name="file_img[]" id="floorplanId" type="file" data-change="floorEvent" style="margin-top: 8px;" multiple>
                                <small class="text-danger">Note: Upload files like jpg formate</small>
                                <output id="result" />
                                <!-- <div id="remove1"></div> -->
                            </div>
                            </div>

使用此代码时,我的图像质量会受到损害。请给出一些想法frndz

3 个答案:

答案 0 :(得分:1)

您使用imagecopyresampled()生成质量高于imagecopyresized()的图片,并将imagejpeg()质量设置为100.这是获得更好输出的唯一方法。

基本上PHP不会操纵您在Photoshop或其他软件中体验过的优质图像,但是您可以通过使用ImageMagick库而不是GD库来使其更好一些。在某些情况下,GD库如何被广泛使用ImageMagick可以以更好的质量完成任务。

答案 1 :(得分:0)

您也可以使用 imagecopyresized() 。这对我来说可能没有质量损失。

答案 2 :(得分:0)

因为,您正在尝试对特定高度和宽度进行硬编码。我建议你通过百分比重新拍摄该图像。

我做过这样的事情:

// Re-sizing Image (Technically Resampling)
$filenameResize = 'celeb8.jpg';
$percent = 0.65;

// Get new dimensions
list($wid, $hei) = getimagesize($filenameResize);
$new_width = $wid * $percent;
$new_height = $hei * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image_org = imagecreatefromjpeg($filenameResize);
imagecopyresampled($image_p, $image_org, 0, 0, 0, 0, $new_width, $new_height, $wid, $hei);

imagejpeg($image_p, 'demo0.jpg');

看,如果有帮助的话!