这是一个非常典型的创建缩略图的脚本。为什么它一直在输出黑色画布而不是我试图指定的白色?我错过了一些完全明显的东西吗?
<?php
$image = 'images/original/' . $_GET['image'];
$thumb = "images/thumbs/t_" . $_GET['image'];
$size = 220;
square_crop($image, $thumb, $size);
function square_crop($src_image, $dest_image, $thumb_size, $jpg_quality = 100)
{
// Get dimensions of existing image
$image = getimagesize($src_image);
// Check for valid dimensions
if( $image[0] <= 0 || $image[1] <= 0 ) return false;
// Determine format from MIME-Type
$image['format'] = strtolower(preg_replace('/^.*?\//', '', $image['mime']));
// Import image
switch( $image['format'] ) {
case 'jpg':
case 'jpeg':
$image_data = imagecreatefromjpeg($src_image);
break;
case 'png':
$image_data = imagecreatefrompng($src_image);
break;
case 'gif':
$image_data = imagecreatefromgif($src_image);
break;
default:
// Unsupported format
return false;
break;
}
// Verify import
if( $image_data == false ) return false;
// Calculate measurements
if( $image[0] & $image[1] ) {
// For landscape images
$x_offset = ($image[0] - $image[1]) / 2;
$y_offset = 0;
$square_size = $image[0] - ($x_offset * 2);
} else {
// For portrait and square images
$x_offset = 0;
$y_offset = ($image[1] - $image[0]) / 2;
$square_size = $image[1] - ($y_offset * 2);
}
//$im = imagecreatetruecolor(100, 100);
// sets background to red
//$red = imagecolorallocate($im, 255, 0, 0);
//imagefill($im, 0, 0, $red);
// Resize and crop
$canvas = imagecreatetruecolor($thumb_size, $thumb_size);
//make the background white
$white = imagecolorallocate($canvas, 255, 255, 255);
imagefill($canvas, 0,0, $white);
if( imagecopyresampled(
$canvas,
$image_data,
0,
0,
$x_offset,
$y_offset,
$thumb_size,
$thumb_size,
$square_size,
$square_size))
{
// Create thumbnail
switch( strtolower(preg_replace('/^.*\./', '', $dest_image)) ) {
case 'jpg':
case 'jpeg':
return imagejpeg($canvas, $dest_image, $jpg_quality);
break;
case 'png':
return imagepng($canvas, $dest_image);
break;
case 'gif':
return imagegif($canvas, $dest_image);
break;
default:
// Unsupported format
return false;
break;
}
} else {
return false;
}
}
?>