/**
* 通过Imagick创建图片的缩略图
*
* @access public
* @param string $img 原始图片的路径
* @param int $thumb_width 缩略图宽度
* @param int $thumb_height 缩略图高度
* @param strint $path 指定生成图片的目录名
* @return mix 如果成功返回缩略图的路径,失败则返回false
*/
function make_thumb_by_imagick($img, $thumb_width = 0, $thumb_height = 0, $path = '', $bgcolor = '') {
$im = new Imagick():
$new_im = $im->clone();
$im->readImage($img);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(IMAGE_QUALITY); // 设置图片品质
$srcImage = $im->getImageGeometry(); //获取源图片宽和高
//图片等比例缩放宽和高设置 ,根据宽度设置等比缩放
$scale_org = $srcImage['width'] / $srcImage['height'];
if ($srcImage['width'] / $thumb_width > $srcImage['height'] / $thumb_height) {
$newX = $thumb_width;
$newY = $thumb_width / $scale_org;
} else {
/* 原始图片比较高,则以高度为准 */
$newX = $thumb_height * $scale_org;
$newY = $thumb_height;
}
$im->thumbnailImage($newX, $newY); //按照比例进行缩放
// 按照缩略图大小创建一个有颜色的图片
$new_im->newImage($thumb_width, $thumb_height, $bgcolor, 'jpg');
//合并图片
$new_im->compositeImage($im, imagick::COMPOSITE_OVER, ($thumb_width - $newX) / 2, ($thumb_height - $newY) / 2);
/* 创建当月目录 */
if (empty($path)) {
$dir = ROOT_PATH . $this->data_dir . '/' . date('Ym') . '/';
} else {
$dir = ROOT_PATH . $this->data_dir . '/' . $path . '/';
}
/* 如果目标目录不存在,则创建它 */
if (!file_exists($dir)) {
if (!make_dir($dir)) {
/* 创建目录失败 */
$error_msg = sprintf($GLOBALS['_LANG']['directory_readonly'], $dir);
$error_no = ERR_DIRECTORY_READONLY;
return false;
}
}
/* 如果文件名为空,生成不重名随机文件名 */
$filename = $this->unique_name($dir);
$filename = $filename . ".jpg"; //jpg图片
//生成JPG图片;
$new_im->writeImage($dir . $filename);
//清空图片内存
$im->clear();
$new_im->clear();
$im->destroy();
$new_im->destroy();
//确认文件是否生成
if (file_exists($dir . $filename)) {
return str_replace(ROOT_PATH, '', $dir) . $filename;
} else {
$error_msg = $GLOBALS['_LANG']['writting_failure'];
$error_no = ERR_DIRECTORY_READONLY;
return false;
}
}
imagick 等比缩放图片,保持规定尺寸
最新推荐文章于 2021-03-19 06:37:15 发布