0

我对在 php 中调整图像大小非常陌生。基本上我想使用上传的图像制作缩略图。我使用了下面的代码,但它不起作用,有人可以帮助我吗?..提前谢谢...

$source_image = $path.$row->photosfolder;
$size = getimagesize($source_image);
$w = $size[0];
$h = $size[1];
$simg = imagecreatefromjpeg($source_image);
$dimg = imagecreatetruecolor(150, 225);
$wm = $w / 150;
$hm = $h / 225;
$h_height = 225 / 2;
$w_height = 150 / 2;

if ($w > $h) {
    $temp = imagecopyresampled($dimg, $simg, 0, 0, 0, 0, 150, 225, $w, $h);
}
elseif (($w < $h) || ($w == $h)) {
    $temp = imagecopyresampled($dimg, $simg, 0, 0, 0, 0, 150, 225, $w, $h);
}
else {
    $temp = imagecopyresampled($dimg, $simg, 0, 0, 0, 0, 150, 225, $w, $h);
}

$thumb_image = imagejpeg($dimg, $simg, 100);
4

3 回答 3

0

请尝试使用以下代码,它将调整图像大小并创建新的缩略图。新尺寸定义为 100 X 100。此示例还将保持图像的纵横比。笔记:

1.如果要设置完整路径,图像路径将是目录路径。2. 在我们考虑用于 jpg 文件的示例中,您可以使用带有 imagecreatefrompng、imagecreatefromgif 的 PGN 和 GIF 文件。3.这将创建PNG文件。

$_imagePath = 'somefile.jpg';
$im = imagecreatefromjpeg($_imagePath);

imagealphablending($im, true);

$_orgWidth = imagesx($im);
$_orgHeight =  imagesy($im);

$_newWidth = 100;
$_newHeight = 100;

$_finalHeight = $_orgHeight * ( $_newWidth/ $_orgWidth);
    if($_finalHeight > $_newHeight){
        $_newWidth = $_orgWidth * ($_newHeight / $_orgHeight);
    }else{
        $_newHeight = $_finalHeight ;
    }


$_thumb = imagecreatetruecolor($_newWidth, $_newHeight);
imagealphablending($_thumb, true);
imagesavealpha($_thumb, true);

imagecopyresampled($_thumb, $im, 0, 0, 0, 0, $_newWidth, $_newHeight, $_orgWidth , $_orgHeight  );

imagepng($_thumb, 'newname.png');
imagedestroy($_thumb);
于 2013-09-18T05:34:20.913 回答
0

检查timthumb.php易于使用,您可以找到完整的教育代码

于 2013-04-13T07:06:24.713 回答
0

如果要调整图像大小,应该在客户端进行,因为 PHP 图像操作需要大量内存和 CPU 时间,并且不必在服务器端进行(无法访问 db,无法访问会话等)。

如果您仍想在 PHP 上执行此操作,可以使用该函数来获得正确的大小:

list($realW, $realH) = getimagesize($source_image);

$realR = $realW / $realH;
$thumbR = $thumbW / $thumbH;

// If you want your resize image to fit inside the max thumb size :

if($realR > $thumbR) // Real image if flatter than thumb
{
    $newW = $thumbW;
    $newH = $newW / $realR;
}
else
{
    $newH = $thumbH;
    $newW = $newH * $realR;
}

// Or if you want your resize image to be as small as possible but
// not smaller than your thumb. This can be helpful in some cases.

if($realR < $thumbR)
{
    // Same code
}

然后像你一样使用重新采样的副本(如果你不能让它工作,请阅读 php 手册,函数概要下面有示例)。

如果要使用 javascript 调整图像大小,可以使用<canvas>

var canvas = document.createElement('canvas');
var image = document.getElementById('image');
var context = canvas.getContext('2d');
context.save();
context.drawImage(image, /* Here you put the right values using the algorithms above */);
context.restore();
var thumb = document.createElement('image');
thumb.src = canvas.toDataUrl();

或类似的东西。根据您的具体情况,您可能会更改一些内容。

于 2013-04-13T07:20:56.400 回答