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