如何在php中使用损失清晰度调整图像大小



我在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

您使用的imagecopyresampled()imagecopyresized()生成质量更好,并将imagejpeg()质量设置为100。这些是使输出更好的唯一方法。

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

您还可以使用 ImageCopyresiged()。这可能对我有用,没有质量损失。

,因为您正在尝试硬编码特定的高度和宽度。我建议您通过百分比重新样本。

我做了这样的事情:

// 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');

看到,如果有帮助!

最新更新