- 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 the size of the original picture is larger than the size of the specified thumbnail, the thumbnail is generated or the original file is copied
- if ($srcWith <= $dstWidth && $srcHeight <= $dstHeight) {
- return copy ($srcPath, $dstPath);
- }
- Read the original picture resource
- @ $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;
- }
- Gets the size of the thumbnail and creates a new image accordingly
- $dstSize = $this->_getdstsize (
- $srcWith, $srcHeight, $dstWidth, $dstHeight
- );
- @ $dstImage = Imagecreatetruecolor (
- $dstSize [' width '], $dstSize [' Height ']
- );
- @imagecopyresampled (
- $dstImage, $srcImage, 0, 0, 0, 0,
- $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 ',
- Fread ($fileHandle, 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 '],
- Fread ($fileHandle, $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 ', substr ($image, $p, 2));
- $color [1] = $palette [$color [1]+1];
- } else if ($bmp [' bits_per_pixel '] = = 8) {
- $color = Unpack (' n ', $vide. substr ($image, $p, 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 ', $vide. substr ($image, Floor ($p), 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, $srcHeight, $dstWidth, $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;
- }
- }
Copy Code
|