| | И можно ли это реализовать?
Имеется например фотоальбом, по умолчанию размер 640х480, когда юзер грузит огромное фото - нет проблем, оно отлично урезается до 640х480, а вот когда фото значительно мЕньшее - GD2 растягивает его до 640х480, результат - безобразное качество. Как запретить увеличивать меньшие изображения? Буду премного благодарен.
В скрипте прописано следующее:
function uploadImage($aFileArray,$aSaveAs,$aMax,$aDimensionArray,$aVideo,$aProgram,$aNoDate=null)
{
global $set_chmod,$set_image_filetypes,$set_video_filetypes,$set_doc_filetypes;
if ($set_video_filetypes)
$lVideoArray=split(",",$set_video_filetypes);
if ($set_doc_filetypes)
$lDocArray=split(",",$set_doc_filetypes);
if ($set_image_filetypes)
$lImageArray=split(",",$set_image_filetypes);
/*
Example:
$FileArray=$_FILES["userfile"];
$SaveAs="/home/delta/public_html/imageupload/upload/test";
$MaxSize="10000";
$DimensionArray[]="200x190";
$DimensionArray[]="500x500";
$returnValue=uploadImage($FileArray,$SaveAs,$MaxSize,$DimensionArray,"",0);
if (is_int($returnValue))
echo getErrorMsg($returnValue);
else
{
foreach ($returnValue as $item)
{
echo "Filen $item ble lastet opp!";
echo "<img src='upload/$item'><br>";
}
}
*/
// File type check
if ($aVideo=="1" && !in_array($aFileArray["type"],$lVideoArray))
{
echo $aFileArray["type"];
return 1;
}
else if ($aVideo=="2" && !in_array($aFileArray["type"],$lDocArray))
{
echo $aFileArray["type"];
return 1;
}
else if (!$aVideo && !in_array($aFileArray["type"],$lImageArray))
{
echo $aFileArray["type"];
return 1;
}
// Security check
if (!is_uploaded_file($aFileArray["tmp_name"]))
return 2;
// File-size check
if ($aFileArray["size"]>($aMax*1024))
return 3;
// New filename
if (!$aVideo)
{
$fileNameSplit=split("/",$aSaveAs);
$lastFileName=end($fileNameSplit);
$lToday=date("YmHs");
if ($aNoDate==1)
$fileName=$lastFileName;
else
$fileName=$lastFileName . "_" . $lToday;
$dotpos = strrpos($fileName, '.');
$fileName = str_replace('.', '_', substr($fileName, 0, $dotpos)) . substr($fileName, $dotpos);
if ($aFileArray["type"]=="image/gif")
$ext="gif";
elseif ($aFileArray["type"]=="image/pjpeg" || $aFileArray["type"]=="image/jpeg")
$ext="jpg";
elseif ($aFileArray["type"]=="image/png")
$ext="png";
elseif (!$aVideo)
return 4;
$newFileName=$fileName . "." . $ext;
if ($aNoDate==1)
$saveTo_org=$aSaveAs . "." . $ext;
else
$saveTo_org=$aSaveAs . "_" . $lToday . "." . $ext;
}
else
{
$fileNameSplit=split("/",$aSaveAs);
$lastFileName=end($fileNameSplit); // 1 or 2 or 3.. whatever the ad number is
$newFileName=strtolower($aFileArray["name"]);
$dotpos = strrpos($newFileName, '.');
$newFileName = str_replace('.', '_', substr($newFileName, 0, $dotpos)) . substr($newFileName, $dotpos);
$saveTo_org=$aSaveAs . "_" .$newFileName;
$newFileName = $lastFileName."_".$newFileName;
}
if (!@move_uploaded_file($aFileArray['tmp_name'],$saveTo_org))
return 5;
// Do thumb/resize-creation
$returnFileArray[]=$newFileName;
if (!empty($aDimensionArray) && $aProgram!=0)
{
$total_dimentions=count($aDimensionArray);
foreach ($aDimensionArray as $item)
{
$c++;
$xyArray=split("x",$item);
$x=$xyArray[0];
$y=$xyArray[1];
$saveTo=$aSaveAs . "_" . $lToday . "_tmb" . $c . "." . $ext;
if ($total_dimentions==$c)
$saveTo=$saveTo_org;
else
$returnFileArray[]=$fileName . "_tmb" . $c . "." . $ext;
if ($aProgram==1)
makeIMThumb($saveTo_org,$saveTo,$item);
elseif ($aProgram==2)
$res=makeGDThumb($saveTo_org,$saveTo,$ext,$x,$y);
@chmod("$saveTo", octdec($set_chmod));
if (!file_exists($saveTo))
return 6;
}
}
return $returnFileArray;
}
function makeIMThumb($aFromfile,$aToFile,$aGeo)
{
global $set_magic_path;
$command = "$set_magic_path -quality 80 -geometry $aGeo $aFromfile $aToFile";
$res = exec($command);
}
function makeGDThumb($aInputPath,$aOutputPath,$aFileType,$max_x,$max_y)
{
if ($aFileType=="jpg")
$source = ImageCreateFromJPEG ($aInputPath);
elseif ($aFileType=="png")
$source = ImageCreateFromPNG ($aInputPath);
elseif ($aFileType=="gif")
$source = ImageCreateFromGIF ($aInputPath);
list($x, $y) = getimagesize($aInputPath);
if (($max_x/$max_y) < ($x/$y)) {
$save = imagecreatetruecolor($x/($x/$max_x), $y/($x/$max_x));
}
else {
$save = imagecreatetruecolor($x/($y/$max_y), $y/($y/$max_y));
}
imagecopyresampled ($save, $source, 0, 0, 0, 0, imagesx($save), imagesy($save), $x, $y);
if ($aFileType=="jpg")
imagejpeg($save,$aOutputPath,90);
elseif ($aFileType=="png")
imagePNG($save,$aOutputPath);
elseif ($aFileType=="gif")
imageGIF($save,$aOutputPath);
} | |