编辑:这可以很容易地通过CSS实现,在撰写本文时我不太了解CSS
我使用PHP创建了一个缩略图生成器。生成的缩略图应该是相同大小的。但问题是上传的图片具有不同的宽高比,如横向或纵向,则缩略图会变得丑陋。因此,我创建了上面的图片以进行澄清。无论上传什么样的图片,它都将放入矩形图片中。所以长宽比不会改变,缩略图将是相同的大小。请问有人能帮助我或提供一些想法吗?
编辑:这可以很容易地通过CSS实现,在撰写本文时我不太了解CSS
我使用PHP创建了一个缩略图生成器。生成的缩略图应该是相同大小的。但问题是上传的图片具有不同的宽高比,如横向或纵向,则缩略图会变得丑陋。因此,我创建了上面的图片以进行澄清。无论上传什么样的图片,它都将放入矩形图片中。所以长宽比不会改变,缩略图将是相同的大小。请问有人能帮助我或提供一些想法吗?
define('THUMBNAIL_IMAGE_MAX_WIDTH', 150);
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150);
function generate_image_thumbnail($source_image_path, $thumbnail_image_path)
{
list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
switch ($source_image_type) {
case IMAGETYPE_GIF:
$source_gd_image = imagecreatefromgif($source_image_path);
break;
case IMAGETYPE_JPEG:
$source_gd_image = imagecreatefromjpeg($source_image_path);
break;
case IMAGETYPE_PNG:
$source_gd_image = imagecreatefrompng($source_image_path);
break;
}
if ($source_gd_image === false) {
return false;
}
$source_aspect_ratio = $source_image_width / $source_image_height;
$thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT;
if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
$thumbnail_image_width = $source_image_width;
$thumbnail_image_height = $source_image_height;
} elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) {
$thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
$thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
} else {
$thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
$thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio);
}
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
$img_disp = imagecreatetruecolor(THUMBNAIL_IMAGE_MAX_WIDTH,THUMBNAIL_IMAGE_MAX_WIDTH);
$backcolor = imagecolorallocate($img_disp,0,0,0);
imagefill($img_disp,0,0,$backcolor);
imagecopy($img_disp, $thumbnail_gd_image, (imagesx($img_disp)/2)-(imagesx($thumbnail_gd_image)/2), (imagesy($img_disp)/2)-(imagesy($thumbnail_gd_image)/2), 0, 0, imagesx($thumbnail_gd_image), imagesy($thumbnail_gd_image));
imagejpeg($img_disp, $thumbnail_image_path, 90);
imagedestroy($source_gd_image);
imagedestroy($thumbnail_gd_image);
imagedestroy($img_disp);
return true;
}
generate_image_thumbnail('original_image.jpg', 'thumb_image.jpg'); //call the function
使用该代码,您将获得类似于以下内容的东西:
看一下我Mr Thumb Image Resizing的源代码。 :)
public function proportion($max_width, $max_height) {
if (!( $this->halt )) {
if ($this->image['extension'] == 'gif') {
$this->image['ratio'] = ( $this->image['width'] > $this->image['height'] ) ? $max_width / $this->image['width'] : $max_height / $this->image['height'];
if ($this->image['width'] > $max_width || $this->image['height'] > $max_height) {
$new_width = $this->image['width'] * $this->image['ratio'];
$new_height = $this->image['height'] * $this->image['ratio'];
} else {
$new_width = $this->image['width'];
$new_height = $this->image['height'];
}
$this->image['composite'] = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($this->image['composite'], $this->image['render'], 0, 0, 0, 0, $new_width, $new_height, $this->image['width'], $this->image['height']);
$this->image['colorcount'] = imagecolorstotal($this->image['render']);
imagetruecolortopalette($this->image['composite'], true, $this->image['colorcount']);
imagepalettecopy($this->image['composite'], $this->image['render']);
$this->image['transparentcolor'] = imagecolortransparent($this->image['render']);
imagefill($this->image['composite'], 0, 0, $this->image['transparentcolor']);
imagecolortransparent($this->image['composite'], $this->image['transparentcolor']);
} else {
$this->image['ratio'] = ( $this->image['width'] > $this->image['height'] ) ? $max_width / $this->image['width'] : $max_height / $this->image['height'];
if ($this->image['width'] > $max_width || $this->image['height'] > $max_height) {
$new_width = $this->image['width'] * $this->image['ratio'];
$new_height = $this->image['height'] * $this->image['ratio'];
} else {
$new_width = $this->image['width'];
$new_height = $this->image['height'];
}
$this->image['composite'] = imagecreatetruecolor($new_width, $new_height);
imagecopyresampled($this->image['composite'], $this->image['render'], 0, 0, 0, 0, $new_width, $new_height, $this->image['width'], $this->image['height']);
}
} else {
echo 'Execution halted!';
}
}
example.php
下查看其使用示例 http://www.phpclasses.org/browse/file/28565.html 将 $image
变量更改为 $image = $_GET['i']
,将允许您在基本的 HTML 标签中链接图像,例如 <img src="example.php?i=images/myimage.jpg" alt="My Image" />
您还可以将最大宽度和高度变量更改为查询,以便在运行时定义宽度/高度 <img src="example.php?i=images/myimage.jpg&w=200&h=300" alt="My Image" />
- WASasquatchpublic static function makeThumb($src, $dest, $desired_width, $format = 'image/jpeg')
{
/* read the source image */
$source_image = null;
if($format == 'image/jpeg')
{
$source_image = imagecreatefromjpeg($src);
}
else if($format == 'image/png')
{
$source_image = imagecreatefrompng($src);
}
$width = imagesx($source_image);
$height = imagesy($source_image);
/* find the "desired height" of this thumbnail, relative to the desired width */
$desired_height = floor($height * ($desired_width / $width));
/* create a new, "virtual" image */
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
imageAlphaBlending($virtual_image, false);
imageSaveAlpha($virtual_image, true);
/* copy source image at a resized size */
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
/* create the physical thumbnail image to its destination */
if($format == 'image/jpeg')
{
imagejpeg($virtual_image, $dest);
}
else if($format == 'image/png')
{
imagepng($virtual_image, $dest);
}
}
define('THUMB_WIDTH', 60);
define('THUMB_HEIGHT', 80);
define('MAGICK_PATH','/usr/local/bin/');
function makeThumbnail($in, $out) {
$width = THUMB_WIDTH;
$height = THUMB_HEIGHT;
list($w,$h) = getimagesize($in);
$thumbRatio = $width/$height;
$inRatio = $w/$h;
$isLandscape = $inRatio > $thumbRatio;
$size = ($isLandscape ? '1000x'.$height : $width.'x1000');
$xoff = ($isLandscape ? floor((($inRatio*$height)-$width)/2) : 0);
$command = MAGICK_PATH."convert $in -resize $size -crop {$width}x{$height}+{$xoff}+0 ".
"-colorspace RGB -strip -quality 90 $out";
exec($command);
}
请参考以下链接 - http://coffeeshopped.com/2009/01/creating-image-thumbnails-using-php-and-imagemagick 或者 http://in1.php.net/manual/en/class.imagick.php