下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
<?PHP class Thumb { public function create($srcPath,$dstPath,$dstWidth,$dstHeight) { if (!file_exists($srcPath)) { return false; } @$srcSize = getimagesize($srcPath); if (empty($srcSize)) { return false; } $srcWith = intval($srcSize[0]); $srcHeight = intval($srcSize[1]); //如果原始图片的尺寸大于指定缩略图的尺寸,则生成缩略图,否则拷贝原始文件 if ($srcWith <= $dstWidth && $srcHeight <= $dstHeight) { return copy($srcPath,$dstPath); } //读取原始图片资源 @$srcImage = imagecreatefromjpeg($srcPath); if (empty($srcImage)) { @$srcImage = imagecreatefromgif($srcPath); } if (empty($srcImage)) { @$srcImage = imagecreatefrompng($srcPath); } if (empty($srcImage)) { @$srcImage = $this->_imageCreateFromBMP($srcPath); } if (empty($srcImage)) { return false; } //获取缩略图的尺寸,并据此生成新的图像 $dstSize = $this->_getDstSize( $srcWith,$srcHeight,$dstHeight ); @$dstimage = imagecreatetruecolor( $dstSize['width'],$dstSize['height'] ); @imagecopyresampled( $dstimage,$srcImage,$dstSize['width'],$dstSize['height'],$srcWith,$srcHeight ); return @imagepng($srcPath,$dstPath); } private function _imageCreateFromBMP($filePath) { $fileHandle = fopen($filePath,'rb'); if (empty($fileHandle)) { return false; } $file = unpack( 'vfile_type/Vfile_size/Vreserved/Vbitmap_offset',fread($fileHandle,14) ); if ($file['file_type'] != 19778) { return false; } $bmp = unpack( 'Vheader_size/Vwidth/Vheight/vplanes/'. 'vbits_per_pixel/Vcompression/Vsize_bitmap/'. 'Vhoriz_resolution/Vvert_resolution/Vcolors_used/Vcolors_important',40) ); $bmp['colors'] = pow(2,$bmp['bits_per_pixel']); if ($bmp['size_bitmap'] == 0) { $bmp['size_bitmap'] = $file['file_size'] - $file['bitmap_offset']; } $bmp['bytes_per_pixel'] = $bmp['bits_per_pixel'] / 8; $bmp['bytes_per_pixel2'] = ceil($bmp['bytes_per_pixel']); $bmp['decal'] = $bmp['width'] * $bmp['bytes_per_pixel'] / 4; $bmp['decal'] -= floor($bmp['width'] * $bmp['bytes_per_pixel'] / 4); $bmp['decal'] = 4 - (4 * $bmp['decal']); if ($bmp['decal'] == 4) { $bmp['decal'] = 0; } $palette = array(); if ($bmp['colors'] < 16777216) { $palette = unpack( 'V' . $bmp['colors'],$bmp['colors'] * 4) ); } $image = fread($fileHandle,$bmp['size_bitmap']); $vide = chr(0); $res = imagecreatetruecolor($bmp['width'],$bmp['height']); $p = 0; $y = $bmp['height'] - 1; while ($y >= 0) { $x = 0; while ($x < $bmp['width']) { if ($bmp['bits_per_pixel'] == 24) { $color = unpack('V',substr($image,$p,3) . $vide); } else if ($bmp['bits_per_pixel'] == 16) { $color = unpack('n',2)); $color[1] = $palette[$color[1]+1]; } else if ($bmp['bits_per_pixel'] == 8) { $color = unpack('n',$vide . substr ($image,1)); $color[1] = $palette[$color[1]+1]; } else if ($bmp['bits_per_pixel'] ==4) { $color = unpack('n',$vide . substr($image,floor($p),1)); if (($p * 2) % 2 == 0) { $color[1] = ($color[1] >> 4); } else { $color[1] = ($color[1] & 0x0F); } $color[1] = $palette[$color[1] + 1]; } else if ($bmp['bits_per_pixel'] == 1) { $color = unpack('n',1)); switch (($p * 8) % 8) { case 0: $color[1] = ($color[1] >> 7); break; case 1: $color[1] = ($color[1] & 0x40) >> 6; break; case 2: $color[1] = ($color[1] & 0x20) >> 5; break; case 3: $color[1] = ($color[1] & 0x10) >> 4; break; case 4: $color[1] = ($color[1] & 0x8) >> 3; break; case 5: $color[1] = ($color[1] & 0x4) >> 2; break; case 6: $color[1] = ($color[1] & 0x2) >> 1; break; case 7: $color[1] = ($color[1] & 0x1); break; } $color[1] = $palette[$color[1] + 1]; } else { return false; } imagesetpixel($res,$x,$y,$color[1]); $x++; $p += $bmp['bytes_per_pixel']; } $y--; $p += $bmp['decal']; } fclose($fileHandle); return $res; } private function _getDstSize($srcWith,$dstHeight) { $size = array('width' => $srcWith,'height' => $srcHeight); if ($dstWidth > 0 && $dstHeight > 0) { if ($srcWith > 0 && $srcHeight > 0) { if ($srcWith / $srcHeight >= $dstWidth / $dstHeight) { if ($srcWith > $dstWidth) { $size['width'] = $dstWidth; $size['height'] = $srcHeight * $dstWidth / $srcWith; } } else { if ($srcHeight > $dstHeight) { $size['width'] = $srcWith * $dstHeight / $srcHeight; $size['height'] = $dstHeight; } } } } return $size; } }
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。