我在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
答案 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');
看,如果有帮助的话!