Most of the site generated thumbnails are proportional operation, today we have to see the size of the image can be fixed "> image size, not enough to automatically fill the blank Oh. If you need a friend, please refer to it.
Error_reporting (E_all);
Test
Imagezoom (' 1.jpg ', ' 2.jpg ', +, ' #FFFFFF ');
/*
PHP thumbnail functions:
Equal proportional lossless compression, can be filled with supplemental color Author: Andy
Hosting Format:
BMP, JPG, GIF, png
Param
@srcimage: Picture to zoom Out
@dstimage: the picture to save
@dst_width: Reduce the width
@dst_height: Reduce the high
@backgroundcolor: Complementary colors such as: #FFFFFF support 6-bit does not support 3-bit
*/
function Imagezoom ($srcimage, $dstimage, $dst _width, $dst _height, $backgroundcolor) {
The file name is garbled
if (Php_os = = ' WINNT ') {
$srcimage = Iconv (' UTF-8 ', ' GBK ', $srcimage);
$dstimage = Iconv (' UTF-8 ', ' GBK ', $dstimage);
}
$dstimg = Imagecreatetruecolor ($dst _width, $dst _height);
$color = Imagecolorallocate ($dstimg
, Hexdec (substr ($backgroundcolor, 1, 2))
, Hexdec (substr ($backgroundcolor, 3, 2))
, Hexdec (substr ($backgroundcolor, 5, 2))
);
Imagefill ($dstimg, 0, 0, $color);
if (! $arr =getimagesize ($srcimage)) {
echo "The file to generate the thumbnail does not exist";
Exit
}
$SRC _width = $arr [0];
$SRC _height = $arr [1];
$srcimg = null;
$method = Getcreatemethod ($srcimage);
if ($method) {
Eval (' $srcimg = '. $method. ';' );
}
$DST _x = 0;
$DST _y = 0;
$DST _w = $dst _width;
$DST _h = $dst _height;
if (($dst _width/$dst _height-$src _width/$src _height) > 0) {
$DST _w = $src _width * ($dst _height/$src _height);
$DST _x = ($dst _width-$dst _w)/2;
} elseif (($dst _width/$dst _height-$src _width/$src _height) < 0) {
$DST _h = $src _height * ($dst _width/$src _width);
$DST _y = ($dst _height-$dst _h)/2;
}
Imagecopyresampled ($dstimg, $srcimg, $dst _x
, $dst _y, 0, 0, $dst _w, $dst _h, $src _width, $src _height);
Save format
$arr = Array (
' jpg ' = ' imagejpeg '
, ' jpeg ' = ' imagejpeg '
, ' png ' = ' imagepng '
, ' gif ' = ' imagegif '
, ' bmp ' = ' imagebmp '
);
$suffix = Strtolower (Array_pop (Explode ('. ', $dstimage)));
if (!in_array ($suffix, Array_keys ($arr))) {
echo "Saved filename is wrong";
Exit
} else {
Eval ($arr [$suffix]. ' ($dstimg, "'. $dstimage. '); ');
}
Imagejpeg ($dstimg, $dstimage);
Imagedestroy ($DSTIMG);
Imagedestroy ($SRCIMG);
}
function Getcreatemethod ($file) {
$arr = Array (
' 474946 ' = ' imagecreatefromgif (' $file ') '
, ' ffd8ff ' = ' imagecreatefromjpeg (' $file ') '
, ' 424D ' = ' imagecreatefrombmp (' $file ') '
, ' 89504E ' = ' imagecreatefrompng (' $file ') '
);
$FD = fopen ($file, "RB");
$data = Fread ($FD, 3);
$data = Str2hex ($data);
if (Array_key_exists ($data, $arr)) {
return $arr [$data];
} elseif (Array_key_exists (substr ($data, 0, 4), $arr)) {
return $arr [substr ($data, 0, 4)];
} else {
return false;
}
}
function Str2hex ($STR) {
$ret = "";
for ($i = 0; $i < strlen ($STR); $i + +) {
$ret. = Ord ($str [$i]) >= 16? Strval (Dechex (Ord ($str [$i]))
: ' 0 '. Strval (Dechex (Ord ($str [$i]));
}
Return Strtoupper ($ret);
}
BMP Create function PHP itself has no
function Imagecreatefrombmp ($filename)
{
if (! $f 1 = fopen ($filename, "RB")) return FALSE;
$FILE = Unpack ("Vfile_type/vfile_size/vreserved/vbitmap_offset", Fread ($f 1,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 ($f 1,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 '] = ($BMP [' decal ']);
if ($BMP [' decal '] = = 4) $BMP [' decal '] = 0;
$PALETTE = Array ();
if ($BMP [' Colors '] < 16777216)
{
$PALETTE = Unpack (' V '. $BMP [' colors '], fread ($f 1, $BMP [' Colors ']*4)];
}
$IMG = Fread ($f 1, $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 ($IMG, $P, 3). $VIDE);
ElseIf ($BMP [' bits_per_pixel '] = = 16)
{
$COLOR = Unpack ("n", substr ($IMG, $P, 2));
$COLOR [1] = $PALETTE [$COLOR [1]+1];
}
ElseIf ($BMP [' bits_per_pixel '] = = 8)
{
$COLOR = Unpack ("n", $VIDE. substr ($IMG, $P, 1));
$COLOR [1] = $PALETTE [$COLOR [1]+1];
}
ElseIf ($BMP [' bits_per_pixel '] = = 4)
{
$COLOR = Unpack ("n", $VIDE. substr ($IMG, Floor ($P), 1));
if ($P *)%2 = = 0) $COLOR [1] = ($COLOR [1] >> 4); else $COLOR [1] = ($COLOR [1] & 0x0F);
$COLOR [1] = $PALETTE [$COLOR [1]+1];
}
ElseIf ($BMP [' bits_per_pixel '] = = 1)
{
$COLOR = Unpack ("n", $VIDE. substr ($IMG, Floor ($P), 1));
if ($P *8)%8 = = 0) $COLOR [1] = $COLOR [1] >>7;
ElseIf (($P *8)%8 = = 1) $COLOR [1] = ($COLOR [1] & 0x40) >>6;
ElseIf (($P *8)%8 = = 2) $COLOR [1] = ($COLOR [1] & 0x20) >>5;
ElseIf (($P *8)%8 = = 3) $COLOR [1] = ($COLOR [1] & 0x10) >>4;
ElseIf (($P *8)%8 = = 4) $COLOR [1] = ($COLOR [1] & 0x8) >>3;
ElseIf (($P *8)%8 = = 5) $COLOR [1] = ($COLOR [1] & 0x4) >>2;
ElseIf (($P *8)%8 = = 6) $COLOR [1] = ($COLOR [1] & 0x2) >>1;
ElseIf (($P *8)%8 = = 7) $COLOR [1] = ($COLOR [1] & 0x1);
$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 ($f 1);
return $res;
}
BMP save function, PHP itself is not
function Imagebmp ($im, $FN = False)
{
if (! $im) return false;
if ($fn = = = False) $fn = ' php://output ';
$f = fopen ($fn, "w");
if (! $f) return false;
$biWidth = Imagesx ($im);
$biHeight = Imagesy ($im);
$biBPLine = $biWidth * 3;
$biStride = ($biBPLine + 3) & ~;
$biSizeImage = $biStride * $biHeight;
$bfOffBits = 54;
$bfSize = $bfOffBits + $biSizeImage;
Fwrite ($f, ' BM ', 2);
Fwrite ($f, Pack (' VvvV ', $bfSize, 0, 0, $bfOffBits));
Fwrite ($f, Pack (' VVVVVVVVVVV ', Max, $biWidth, $biHeight, 1, 0, $biSizeImage, 0, 0, 0, 0));
$numpad = $biStride-$biBPLine;
for ($y = $biHeight-1; $y >= 0;--$y)
{
for ($x = 0; $x < $biWidth; + + $x)
{
$col = Imagecolorat ($im, $x, $y);
Fwrite ($f, Pack (' V ', $col), 3);
}
for ($i = 0; $i < $numpad; + + $i)
Fwrite ($f, Pack (' C ', 0));
}
Fclose ($f);
return true;
}
?>
http://www.bkjia.com/PHPjc/632982.html www.bkjia.com true http://www.bkjia.com/PHPjc/632982.html techarticle most of the site generated thumbnails are proportional operation, today we have to see the size of the image can be fixed "> image size, not enough to automatically fill the blank Oh. A friend who needs it can ...