使用下面的函數是這樣的:
Image('/path/to/original.image', '1/1', '150*', './thumb.jpg'); // thumb, width = 150 px
Image('/path/to/original.image', null, '600*', './full.jpg'); // full, width = 600 px
您可以指定通過第二個參數的作物比(W/H),如果你願意,你也可以指定大小的寬度和/或高度圖像通過第三個參數(w * h)。
function Image($source, $crop = null, $scale = null, $destination = null)
{
$source = @ImageCreateFromString(@file_get_contents($source));
if (is_resource($source) === true)
{
$size = array(ImageSX($source), ImageSY($source));
if (isset($crop) === true)
{
$crop = array_filter(explode('/', $crop), 'is_numeric');
if (count($crop) == 2)
{
$crop = array($size[0]/$size[1], $crop[0]/$crop[1]);
if ($crop[0] > $crop[1])
{
$size[0] = $size[1] * $crop[1];
}
else if ($crop[0] < $crop[1])
{
$size[1] = $size[0]/$crop[1];
}
$crop = array(ImageSX($source) - $size[0], ImageSY($source) - $size[1]);
}
else
{
$crop = array(0, 0);
}
}
else
{
$crop = array(0, 0);
}
if (isset($scale) === true)
{
$scale = array_filter(explode('*', $scale), 'is_numeric');
if (count($scale) >= 1)
{
if (empty($scale[0]) === true)
{
$scale[0] = $scale[1] * $size[0]/$size[1];
}
else if (empty($scale[1]) === true)
{
$scale[1] = $scale[0] * $size[1]/$size[0];
}
}
else
{
$scale = array($size[0], $size[1]);
}
}
else
{
$scale = array($size[0], $size[1]);
}
$result = ImageCreateTrueColor($scale[0], $scale[1]);
if (is_resource($result) === true)
{
ImageFill($result, 0, 0, IMG_COLOR_TRANSPARENT);
ImageSaveAlpha($result, true);
ImageAlphaBlending($result, true);
if (ImageCopyResampled($result, $source, 0, 0, $crop[0]/2, $crop[1]/2, $scale[0], $scale[1], $size[0], $size[1]) === true)
{
ImageConvolution($result, array(array(-1, -1, -1), array(-1, 16, -1), array(-1, -1, -1)), 8, 0);
ImageJPEG($result, $destination, 90);
}
}
}
return false;
}
的圖像被自動地增強(銳化)並保存爲具有高質量的JPEG。
享受!
你已經在這個問題上提出了一個獎勵,但沒有評論這裏的任何答案,他們有什麼問題,你到底需要什麼? – 2009-12-07 17:19:13
我想要更多變體的答案能夠爲我選擇更好的答案,因爲我不認爲這些答案令人滿意。 – Narek 2009-12-12 17:19:19