我制作的文件上传脚本,上传时模糊图片上传!这是我目前的剧本,试图弄清楚我做错了什么。脚本将图像上传为.png,用户名是当前登录用户的实际用户名。
请注意原始图像为17x22,因此不会造成模糊。
<?php
include('../class/resize.php');
//error_reporting(0);
if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST"){
$path = "../files/cloaks/"; //set your folder path
$filename = $_FILES['photoimg']['tmp_name']; //get the temporary uploaded image name
$valid_formats = array("jpg", "png", "gif", "bmp", "jpeg","GIF","JPG","PNG", "JPEG"); //add the formats you want to upload
$name = $_FILES['photoimg']['name']; //get the name of the image
$size = $_FILES['photoimg']['size']; //get the size of the image
if(strlen($name)) //check if the file is selected or cancelled after pressing the browse button.
{
list($txt, $ext) = explode(".", $name); //extract the name and extension of the image
if(in_array($ext,$valid_formats)) //if the file is valid go on.
{
if($size < 2098888) // check if the file size is more than 2 mb
{
$actual_image_name = $_POST['fname']; //actual image name going to store in your folder
$tmp = $_FILES['photoimg']['tmp_name'];
if(move_uploaded_file($tmp, $path.$actual_image_name)) //check the path if it is fine
{
move_uploaded_file($tmp, $path.$actual_image_name); //move the file to the folder
$dburl = ('../files/cloaks/'.$actual_image_name.'');
$image = new ZiResize();
$image->load($dburl);
$image->resize(22,17);
$image->save($path.$actual_image_name);
//display the image after successfully upload
echo "<img src='files/cloaks/".$actual_image_name."' class='preview'> <input type='hidden' name='actual_image_name' id='actual_image_name' value='$actual_image_name' />";
}
else
{
echo "failed";
}
}
else
{
echo "Error! Max image size is 2 MB!";
}
}
else
{
echo "Error! Invalid image format!";
}
}
else
{
echo "Error! No file selected!";
}
exit;
}
?>
resize.php代码
<?php
class ZiResize {
var $image;
var $image_type;
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image,$filename,$compression);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image,$filename);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image,$filename);
}
if( $permissions != null) {
chmod($filename,$permissions);
}
}
function output($image_type=IMAGETYPE_JPEG) {
if( $image_type == IMAGETYPE_JPEG ) {
imagejpeg($this->image);
} elseif( $image_type == IMAGETYPE_GIF ) {
imagegif($this->image);
} elseif( $image_type == IMAGETYPE_PNG ) {
imagepng($this->image);
}
}
function getWidth() {
return imagesx($this->image);
}
function getHeight() {
return imagesy($this->image);
}
function resizeToHeight($height) {
$ratio = $height / $this->getHeight();
$width = $this->getWidth() * $ratio;
$this->resize($width,$height);
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
function scale($scale) {
$width = $this->getWidth() * $scale/100;
$height = $this->getheight() * $scale/100;
$this->resize($width,$height);
}
function resize($width,$height) {
$new_image = imagecreate($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
}
}
?>
答案 0 :(得分:1)
保存图像时更改compression
参数
function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null)
你正在使用jpg格式,在php中,你可以设置结果图像的质量,如果质量低于原始图像,即使没有调整大小,图像也会显得“模糊”。
你可以:
$image->save($path.$actual_image_name, NULL, 100);
由于您没有调整图像大小,可以将其替换为:
$image->resize(22,17);
$image->save($path.$actual_image_name);
用这个:
$image->save($path.$actual_image_name, NULL, 100);
答案 1 :(得分:0)
你的调整大小为22px,17px。将图像缩小到该大小时,它总是看起来很眩晕。你也应该使用imagecreatetruecolor
,因为它允许全彩色光谱。 imagecreate的颜色有限,这是图像看起来模糊的另一个原因