我是一个php noob,并试图创建一个图像大小调整脚本,将上传的图像缩小到更小的尺寸。使用我当前的脚本,我会显示原始图像。新的宽度和高度似乎没有注册。任何帮助表示赞赏。
<?php
if ($_SERVER['REQUEST_METHOD']=='POST') {
if (isset($_FILES['image']['tmp_name'])) {
if ($_FILES['image']['error']==0){
$new_dir = '/PHP_MySQL_Practice/uploaded/images';
$fullpath = $_SERVER['DOCUMENT_ROOT'].$new_dir;
if(!is_dir($fullpath)) {
mkdir($fullpath, 0777, TRUE);
}
//get file name and type(extension)
$name = $_FILES['image']['name'];
$type = $_FILES['image']['type'];
//separate image name after first "dot"
$separated = explode(".", $name);
//get string before the dot which was stored as the 1st item in the separated array.
$first = $separated[0];
//use php function pathinfo to get extension of image file
$ext = pathinfo($name, PATHINFO_EXTENSION);
//concatenate current timestamp (to avoid file overwrites) with the extracted file 'firstname' and add the extension
$name = time().'_'.$first.'.'.$ext;
$target = $fullpath.'/'.$name;
if (move_uploaded_file($_FILES['image']['tmp_name'], $target)) {
resizeImage($target, $name);
echo '<img src="' . $target . '"/>';
}
}
else {
echo 'there was an error in saving ur image file.';
}
}
else {
echo 'ur image could not be uploaded.';
}
}
else {
?>
<form method="POST" enctype="multipart/form-data">
<label>upload image: </label>
<input type="file" name="image" />
<input type="submit" />
</form>
<?php
}
//function to resize image
function resizeImage($dir, $img) {
list($src_w, $src_h) = getimagesize($dir);
$max_w = 150;
$max_h = 150;
if ($src_w > $max_w) {
$ratio = $max_w / $src_w;
$new_img_w = $src_w * $ratio;
}
else if ($src_h > $max_h) {
$ratio = $max_h / $src_h;
$new_img_h = $src_h * $ratio;
}
$img_mime_type = getimagesize($dir);
switch ($img_mime_type['mime']) {
case 'image/jpeg':
case 'image/pjpeg':
$src = imagecreatefromjpeg($dir);
return $src;
break;
case 'image/gif':
$src = imagecreatefromgif($dir);
return $src;
break;
case 'image/png':
$src = imagecreatefrompng($dir);
return $src;
break;
default:
return FALSE;
break;
}
$new_img = imagecreatetruecolor($new_img_w, $new_img_h);
imagecopyresampled($new_img, $src, 0, 0, 0, 0, $new_img_w, $new_img_h, $max_w, $max_h);
switch ($img_mime_type['mime']) {
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($new_img, $dir, 100);
break;
case 'image/gif':
imagegif($new_img, $dir);
break;
case 'image/png':
imagepng($new_img, $dir);
break;
default:
return FALSE;
break;
}
imagedestroy($src);
imagedestroy($new_img);
}
?>
答案 0 :(得分:3)
那里有一些缺陷
imagegif
只有2个参数$im
并保存位置imagepng
的压缩级别为0到9而不是100 null
imagejpeg($new_img, null, 100);
应更改为$dir
imagdestroy($src);
错误,应为imagedestroy($src);
您的switch
应该是:
switch ($img_mime_type['mime']) {
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($new_img, $dir, 100);
break;
case 'image/gif':
imagegif($new_img, $dir);
break;
case 'image/png':
imagepng($new_img, $dir);
break;
default:
return FALSE;
break;
}
你的调整大小功能:
function resizeImage($dir, $img) {
//echo $dir; die;
list($src_w, $src_h) = getimagesize($dir);
$max_w = 150;
$max_h = 150;
if ($src_w > $max_w) {
$ratio = $max_w / $src_w;
$max_w = $src_w * $ratio;
}
else if ($src_h > $max_h) {
$ratio = $max_h / $src_h;
$max_h = $src_h * $ratio;
}
$img_mime_type = getimagesize($dir);
$src = imagecreatefromstring(file_get_contents($dir));
$new_img = imagecreatetruecolor($max_w, $max_h);
imagecopyresampled($new_img, $src, 0, 0, 0, 0, $max_w, $max_h, $src_w, $src_h);
switch ($img_mime_type['mime']) {
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($new_img, $dir, 100);
break;
case 'image/gif':
imagegif($new_img, $dir);
break;
case 'image/png':
imagepng($new_img, $dir);
break;
default:
return FALSE;
break;
}
imagedestroy($src);
imagedestroy($new_img);
}
答案 1 :(得分:0)
您不是保存图像,而是输出图像的内容。如果查看imagejpeg的文档,您将看到第二个参数是您要保存图像的路径。因此,将第二个参数(null)更改为要保存已调整大小的图像的位置。
答案 2 :(得分:0)
使用以下功能调整图像大小
function image_resize($image, $maxWidth, $maxHeight = null)
{
$file = $image;
$file_headers = @get_headers($file);
//validate file not exists
if( isset($file_headers[0]) && strpos($file_headers[0], '404') ) {
return;
}
$arrayUploadPath = wp_upload_dir();
$fileUploadSubDir = str_replace(basename($image),'', str_replace($arrayUploadPath['baseurl'], '', $image));
$fileUploadDir = $arrayUploadPath['basedir'] . $fileUploadSubDir;
//validate sour ce file existance
if(!file_exists($fileUploadDir . basename($src))) return null;
$fileUploadUrl = $arrayUploadPath['baseurl'] . $fileUploadSubDir;
$srcFileName = $fileUploadDir . basename($image);
$srcSize = getimagesize($srcFileName);
$width = $srcSize[0];
$height = $srcSize[1];
if( empty($maxHeight) ) {
$size = wp_constrain_dimensions($width, $height, $maxWidth);
$maxHeight = $size[1];
}
//fix for image_resize_dimensions() constraint in image_resize() function
if($maxHeight >= $height) $maxHeight = $height - 1;
$newImage = image_resize($srcFileName, $maxWidth, $maxHeight);
$newFileNameUrl = !empty($newImage) && !is_object($newImage) ? $fileUploadUrl . basename($newImage) : null;
return $newFileNameUrl;
}
答案 3 :(得分:0)
试试这个功能......
在此功能中,您可以根据需要传递高度和宽度,因为总共有三种可能性,您可以按比例调整图像大小
这是示例,
//first of all get Height and width of image
function getHeight($image) {
$sizes = getimagesize($image);
$height = $sizes[1];
return $height;
}
//You do not need to alter these functions
function getWidth($image) {
$sizes = getimagesize($image);
$width = $sizes[0];
return $width;
}
现在调整所需的尺寸,我正在使用500px(高度和宽度)
$width = $this->getWidth($fullpath);
$height = $this->getHeight($fullpath);
$profilecroppedthumb = UPLOAD_PATH."FILENAME_WITH_EXTENSION";
$fullpath = $uploadDirectory.$filename.'.'.$ext;
if ($width >= 500 && $height >= 500) {
thumb($fullpath, $profilecroppedthumb, "500", "500");
}
elseif($width >= 500 && $height <= 500)
{
thumb($fullpath, $profilecroppedthumb, "500", "");
}
elseif($width <= 500 && $height >= 500)
{
thumb($fullpath, $profilecroppedthumb, "", "500");
}
else
{
$target = fopen($profilecroppedthumb, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);
}
function thumb($file, $save, $width="", $height="")
{
//GD-Lib > 2.0 only!
//@unlink($save);
//get sizes else stop
if (!$infos = @getimagesize($file)) {
//echo $infos = @getimagesize($file); exit('saf');
return false;
}
// keep proportions
$iWidth = $infos[0];
$iHeight = $infos[1];
$iRatioW = $width / $iWidth;
$iRatioH = $height / $iHeight;
if($height == "" ) {
if ($iRatioW < $iRatioH) {
$iNewW = $iWidth * $iRatioW;
$iNewH = $iHeight * $iRatioW;
} else {
$iNewW = $iWidth * $iRatioW;
$iNewH = $iHeight * $iRatioW;
}
}
elseif ($width == "")
{
if ($iRatioW < $iRatioH) {
$iNewW = $iWidth * $iRatioH;
$iNewH = $iHeight * $iRatioH;
} else {
$iNewW = $iWidth * $iRatioH;
$iNewH = $iHeight * $iRatioH;
}
}
else
{
if ($iRatioW < $iRatioH) {
$iNewW = $iWidth * $iRatioW;
$iNewH = $iHeight * $iRatioW;
} else {
$iNewW = $iWidth * $iRatioH;
$iNewH = $iHeight * $iRatioH;
}
}
//$iNewW = $width;
//$iNewH = $height;
//Don't resize images which are smaller than thumbs
if ($infos[0] < $width && $infos[1] < $height) {
$iNewW = $infos[0];
$iNewH = $infos[1];
}
if($infos[2] == 1) {
/*
* Image is typ gif
*/
$imgA = imagecreatefromgif($file);
$imgB = imagecreate($iNewW,$iNewH);
//keep gif transparent color if possible
if(function_exists('imagecolorsforindex') && function_exists('imagecolortransparent')) {
$transcolorindex = imagecolortransparent($imgA);
//transparent color exists
if($transcolorindex >= 0 ) {
$transcolor = imagecolorsforindex($imgA, $transcolorindex);
$transcolorindex = imagecolorallocate($imgB, $transcolor['red'], $transcolor['green'], $transcolor['blue']);
imagefill($imgB, 0, 0, $transcolorindex);
imagecolortransparent($imgB, $transcolorindex);
//fill white
} else {
$whitecolorindex = @imagecolorallocate($imgB, 255, 255, 255);
imagefill($imgB, 0, 0, $whitecolorindex);
}
//fill white
} else {
$whitecolorindex = imagecolorallocate($imgB, 255, 255, 255);
imagefill($imgB, 0, 0, $whitecolorindex);
}
imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW, $iNewH, $infos[0], $infos[1]);
imagegif($imgB, $save);
} elseif($infos[2] == 2) {
/*
* Image is typ jpg
*/
$imgA = imagecreatefromjpeg($file);
$imgB = imagecreatetruecolor($iNewW,$iNewH);
imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW, $iNewH, $infos[0], $infos[1]);
imagejpeg($imgB, $save,100);
} elseif($infos[2] == 3) {
/*
* Image is typ png
*/
$imgA = imagecreatefrompng($file);
$imgB = imagecreatetruecolor($iNewW, $iNewH);
imagealphablending($imgB, false);
imagecopyresampled($imgB, $imgA, 0, 0, 0, 0, $iNewW, $iNewH, $infos[0], $infos[1]);
imagesavealpha($imgB, true);
imagepng($imgB, $save,100);
} else {
return false;
}
return true;
}
希望这有帮助...