Heim  >  Artikel  >  php教程  >  PHP转换图片格式为JPG并自动缩放成指定大小

PHP转换图片格式为JPG并自动缩放成指定大小

WBOY
WBOYOriginal
2016-06-13 11:40:091326Durchsuche

最近给朋友修改网站时,帮客之家小编发现有一些网站的图片是PNG格式,并且图片文件非常大,差不多都在200KB以上,而同像素的JPG图片会小很多,于是在网上找了一下教程,现在将PHP将指定的图片格式转换为JPG并自动缩放成指定大小的方法发布给大家,支持JPG、BMP、PNG和GIF格式。

不说别的了,直接上代码,此代码不可能直接复制到你的网站使用,需要你懂一些PHP知识,如果您不懂PHP,建议阅读烈火提供的PHP中文手册。

Copy to Clipboard引用的内容:[www.bkjia.com]

function ImageCreateFromBMP( $filename )
{
if ( ! $f1 = fopen ( $filename , "rb" )) return FALSE ;

$FILE = unpack ( "vfile_type/Vfile_size/Vreserved/Vbitmap_offset" , fread ( $f1 , 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 ( $f1 , 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' ] {
$PALETTE = unpack ( 'V' . $BMP [ 'colors' ] , fread ( $f1 , $BMP [ 'colors' ] * 4 ));
}

$IMG = fread ( $f1 , $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 {
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 ) % 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 ( $f1 );
return $res ;
}

// 烈火網 bkjia.COM 欢迎复制,拒绝恶意采集 liehuo.net

function ImageToJPG($srcFile,$dstFile,$towidth,$toheight)
{
$quality=80;
$data = @GetImageSize($srcFile);
switch ($data['2'])
{

case 1:

$im = imagecreatefromgif($srcFile);
break;
case 2:

$im = imagecreatefromjpeg($srcFile);
break;
case 3:
$im = imagecreatefrompng($srcFile);

break;

case 6:

$im = ImageCreateFromBMP( $srcFile );

break;
}

// $dstX=$srcW=@ImageSX($im);

// $dstY=$srcH=@ImageSY($im);

$srcW=@ImageSX($im);
$srcH=@ImageSY($im);
$dstX=$towidth;
$dstY=$toheight;

$ni=@imageCreateTrueColor($dstX,$dstY);

@ImageCopyResampled($ni,$im,0,0,0,0,$dstX,$dstY,$srcW,$srcH);
@ImageJpeg($ni,$dstFile,$quality);
@imagedestroy($im);
@imagedestroy($ni);

}



//用法:

//ImageToJPG('源文件名','目标文件名',目标宽,目标高);

?>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn