PHP thumbnails and other proportional lossless compression, fill in blank areas to add color php code
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 '=> 'imag Ejpeg ', 'jpeg' => 'imagejpeg ', 'PNG' => 'imagepng ', 'GIF' => 'imagegif', 'bmp' => 'imagebmp '); $ suffix = strtolower (array_pop (explode ('. ', $ dstimage); if (! In_array ($ suffix, array_keys ($ arr) {echo "an error occurred while saving the file name"; exit;} else {eval ($ arr [$ suffix]. '($ dstimg ,"'. $ dstimage. '");');} imagejpeg ($ dstimg, $ dstimage); imagedestroy ($ dstimg); imagedestroy ($ srcimg);} function getcreatemethod ($ file) {$ arr = array ('000000' => "imagecreatefromgif ('$ file')", 'ffd8ff' => "imagecreatefromjpeg (' $ file ')", 'mongod' => "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])> = 1 6? Strval (dechex (ord ($ str [$ I]): '0 '. strval (dechex (ord ($ str [$ I]);} return strtoupper ($ ret);} // BMP creation function php itself has no 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 ['color'] = 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 ['desc'] = ($ BMP ['width'] * $ BMP ['bytes _ per_pixel ']/4 ); $ BMP ['desc']-= floor ($ BMP ['width'] * $ BMP ['bytes _ per_pixel ']/4 ); $ BMP ['demo'] = 4-(4 * $ BMP ['demo']); if ($ BMP ['demo'] = 4) $ BMP ['desc'] = 0; $ PALETTE = array (); if ($ BMP ['color'] <16777216) {$ PALETTE = unpack ('V '. $ BMP ['Colors '], fread ($ f1, $ BMP ['Colors'] * 4);} $ IMG = frea D ($ 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 <$ 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 ['bi Ts_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, f Loor ($ 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 ['demo'];} fclose ($ f1); return $ res;} // BMP save function. php itself has no 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 )&~ 3; $ biSizeImage = $ biStride * $ biHeight; $ bfOffBits = 54; $ bfSize = $ bfOffBits + $ biSizeImage; fwrite ($ f, 'bm ', 2 ); fwrite ($ f, pack ('vvvv ', $ bfSize, 0, 0, $ bfOffBits); fwrite ($ f, pack ('vvvvvvvvv', 40, $ biWidth, $ biHeight, 1, 24, 0, $ biSizeImage, 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 ;}?>