Morphius Posted March 6, 2010 Report Share Posted March 6, 2010 Ir nepieciešamība izveidot no bildes mazu pagaidu bildīti. Ir atrasti skripi, kur padodot parametru ka bilde jāsamazina līdz 150px, tad bilžukam garākā mala tiek samazināta līdz 150px un īsākā mala samazināta procentuāli, lai nesabojātu proporcijas, respektīvi mazāk nekā 150px. Kāds ir risinājums, kad no jebkādas bildes tiek izveidots kvadrāts, neizstiepjot un nesaspiežot attēlu. Fiška it kā skaidra, ja bilde ir piemēram 300x500, tad ņemam garāko malu - īsākā mala / 2 un esošo skaitli, 100px, nogriežam no abiem garākās malas galiem. Tikai kā tas izskatās php funkciju veidā? Quote Link to comment Share on other sites More sharing options...
marcis Posted March 6, 2010 Report Share Posted March 6, 2010 (edited) imagecopyresampled() - pārējais jau ir matemātika. Iravēju piemēru no paveca koda: function crop($src, $dst, $width, $height){ if(!$src = imagecreatefromstring(file_get_contents($src))) return false; $srcw = imagesx($src); $srch = imagesy($src); $tmp = imagecreatetruecolor($width, $height); // uztaisam attēlu imagefilledrectangle($tmp, 0, 0, $width, $height, imagecolorallocate($tmp, 255, 255, 255)); // balts fons // sākās visa rēķināšanas daļa if($srcw <= $width && ($srch <= $height || $height == 0)){ $nw = $srcw; $nh = $srch; }else{ $ratio = $srcw/$srch; if($height > 0 && $width/$height > $ratio){ $nw = $height*$ratio; $nh = $height; }else{ $nw = $width; $nh = $width/$ratio; } } imagecopyresampled($tmp, $src, (($width/2)-($nw/2)), (($height/2)-($nh/2)), 0, 0, $nw, $nh, $srcw, $srch); // resize if(!imagejpeg($tmp, $dst, 100)) return false; imagedestroy($tmp); return true; } Edited March 6, 2010 by marcis Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted March 6, 2010 Report Share Posted March 6, 2010 Izdomā uz papīra kā tam ir jāizskatās un pēcak jau to pierakstit phpiski jau ir sīkums - ne tā? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.