笔记
class CouponImageHelper{ /** * 图片上传,生成新图片名称 * * @return 图片名称,及扩展 */ function upload(){ $old_name = preg_replace('/[^a-zA-Z0-9.]/', '_', $_FILES['coupon_img']['name']); $image_type = JFile::getExt( $old_name ); // 图片类型(图片后缀) // 生成新图片名称 $random_name = self::getRandomName(); $new_name = $random_name.'.'.$image_type; $thumb = $random_name.'_thumb'.'.'.$image_type; jimport('joomla.filesystem.file'); $src = $_FILES['coupon_img']['tmp_name']; //源文件 $dest = self::getCouponImagePath().$new_name; //目标路径 if( !JFile::upload( $src, $dest) ){ return false; } return array('name'=>$random_name, 'ext'=>$image_type); } /** * 返回优惠券图片路径 * * @date 2011-04-12 下午15:09 * @author lin * * @param pathtype 判断返回缩略图路径,还是普通优惠券路径, 默认是优惠券图片路径 */ function getCouponImagePath( $pathtype = 'image_coupon_path' ) { static $mediaparams; if ( empty($mediaparams) ) { $media = JComponentHelper::getComponent( 'com_media' ); $mediaparams = new JParameter( $media->params ); } $img_dir = $mediaparams->get( $pathtype ); $img_dir_head_slash = JString::strpos( $img_dir, DS ); $img_dir_slash = JString::strrpos( $img_dir, DS ); $img_dir_head_backslash = JString::strpos( $img_dir, '/'); $img_dir_backslash = JString::strrpos( $img_dir, '/' ); $str_len = JString::strlen( $img_dir ); if ( $img_dir_head_slash !== 0 && $img_dir_head_backslash !== 0) { $img_dir = DS.$img_dir; } if ( $img_dir_slash !== $str_len-1 && $img_dir_backslash !== $str_len-1) { $img_dir = $img_dir.DS; } return JPath::clean(JPATH_ROOT.$img_dir); } /** * 生成随机的图片名称 * * @param $length 默认为15位 */ function getRandomName($length = 15) { $salt = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $len = strlen($salt); $newname = ''; for ($i = 0; $i < $length; $i ++) { $newname .= $salt[mt_rand(0, $len -1)]; } return $newname; } /** * * 生成缩略图 * * @param $name 生成图片名称 * @param $baseWidth 生成缩略图宽度 * @param $baseHeight 生成缩略图高度 * @param $bg 背景色 * @param $Quality 生成图片质量值 */ function createThumbnail($name, $ext='.jpeg', $baseWidth=142, $baseHeight=120, $bg='#000000', $Quality = 75){ $path_dir = self::getCouponImagePath(); //优惠券图片路径 $path_thumb_dir = self::getCouponImagePath( 'image_coupon_thumb_path' ); // 优惠券缩略图路径 $path_image = $path_dir.$name.'.'.$ext; // 优惠券图片 $path_thumb = $path_thumb_dir.$name.'_thumb.'.$ext; //缩略图图片 $hex_color = strtolower( trim($bg,'#;&Hh') ); //array_map()返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元 $bg = array_map('hexdec', explode('.', wordwrap($hex_color, ceil(strlen($hex_color)/3), '.' ,1)) ); $bgColorR = $bg[0]; $bgColorG = $bg[1]; $bgColorB = $bg[2]; //返回图片数据 //返回一个具有四个单元的数组.索引 0 包含图像宽度的像素值,索引 1 包含图像高度的像素值. //索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM //索引 3 是文本字符串,内容为“height="yyy" width="xxx"”, $imageData = getimagesize($path_image); //imagecreatetruecolor() 返回一个图像标识符,代表了一幅大小为 x_size 和 y_size的黑色图像 $imageBG = imagecreatetruecolor($baseWidth, $baseHeight); //imagecolorallocate() 返回一个标识符,代表了由给定的 RGB 成分组成的颜色 $rgb = imagecolorallocate($imageBG, $bgColorR, $bgColorG, $bgColorB); if ( $imageData['mime'] == 'image/jpeg' || $imageData['mime'] == 'image/pjpeg' || $imageData['mime'] == 'image/jpg' || $imageData['mime'] == 'image/gif') { //imagefill()在 image 图像的坐标 x ,y (图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。 imagefill($imageBG, 0, 0, $rgb); } if ( $imageData['mime'] == 'image/jpeg' || $imageData['mime'] == 'image/pjpeg' || $imageData['mime'] == 'image/jpg') { $imageSource = @imagecreatefromjpeg( $path_image ); //imagecreatefromjpeg() 返回图像标识符,代表了从给定的文件名取得的图像 } else if ($imageData['mime'] == 'image/gif') { $imageSource = @imagecreatefromgif( $path_image ); } else { $imageSource = @imagecreatefrompng( $path_image ); } $imageSourceWidth = imagesx( $imageSource ); //imagesx — 取得图像宽度 $imageSourceHeight = imagesy( $imageSource );//imagesy — 取得图像高度 $ratio = ($imageSourceWidth > $imageSourceHeight) ? $baseWidth/$imageSourceWidth : $baseHeight/$imageSourceHeight; $imageSourceNWidth = $imageSourceWidth * $ratio; $imageSourceNHeight = $imageSourceHeight * $ratio; if ($baseWidth > $baseHeight) { if ($imageSourceNHeight > $baseHeight) { $ratio2 = $baseHeight / $imageSourceNHeight; $imageSourceNHeight *= $ratio2; $imageSourceNWidth *= $ratio2; } } else { if ($imageSourceNWidth > $baseWidth) { $ratio2 = $baseWidth / $imageSourceNWidth; $imageSourceNHeight *= $ratio2; $imageSourceNWidth *= $ratio2; } } $base_x = floor(($baseWidth - $imageSourceNWidth) / 2); $base_y = floor(($baseHeight - $imageSourceNHeight) / 2); if( !($imageData['mime'] == 'image/jpeg' || $imageData['mime'] == 'image/pjpeg' || $imageData['mime'] == 'image/jpg' || $imageData['mime'] == 'image/gif') ){ imagealphablending($imageBG, false); // imagealphablending — 设定图像的混色模式 imagesavealpha($imageBG, true); //imagesavealpha 设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息 } //imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值, //因此虽然减小了图像的大小而仍然保持了极大的清晰度.如果成功则返回 TRUE,失败则返回 FALSE。 imagecopyresampled($imageBG, $imageSource, $base_x, $base_y, 0, 0, $imageSourceNWidth, $imageSourceNHeight, $imageSourceWidth, $imageSourceHeight); if ( $imageData['mime'] == 'image/jpeg' || $imageData['mime'] == 'image/pjpeg' || $imageData['mime'] == 'image/jpg') { imagejpeg( $imageBG, $path_thumb, $Quality ); } else if ($imageData['mime'] == 'image/gif') { imagegif( $imageBG, $path_thumb ); } else { imagepng( $imageBG, $path_thumb ); } } }