Jump to content
php.lv forumi

Teorija: image resize


anonīms

Recommended Posts

Kā apmēram var veikt resize pēc maxwidth/maxheight?

Teiksim, ja bildes platums vai augstums pārsniedz kkādus px, tad bilde tiek resaizota, bet nevis uz noteiktu (piem 200x200), bet gan proporcionali orginalam. Ceru, ka sapratāt.

 

omfg. Daļa bez komatiem xD

Edited by anonīms
Link to comment
Share on other sites

Pieņemsim, ka tev ir bilde 350x480px, kuru tu gribi iebāzt 200x250px thumbnailā

 

Sarēķini, cik proporcionāli liela bilde tev ietilpst konkrētajā dimensijā

 

200 / 350 = 0.57

250 / 480 = 0.52

 

Te tevi interesē, kura bilde būs jāsamazina vairāk, tā dimensija arī ir jāņem par galveno. Te sanāk, ka, lai bilde ietilptu 250 px vinjai augstumā ir jābūt 52% no oriģināla. Attiecīgi lai saglabātu proporciju tev arī horizontālā dimensija ir jāsamazina par 52%.

Līdz ar to horizontālā dimensija pārtop par: 350 * 0.52 = 182

 

Rezultātā tev ir bilde 250x182px.

 

 

Tā kā 182 ir mazāks par 200, tad būtu loģiski nocentrēt pa horizontāli to bildi - sameklē nobīdi no malas

(200 - 182) / 2 = 9

 

 

un pēc tam izdomā, kā šos visus ciparus pareizi salikt šajā funkcijā:

http://lv.php.net/imagecopyresampled

 

Identiski arī ar gadījumu, kad vairāk ir jāsamazina horizontālā dimensija.

Link to comment
Share on other sites

system("convert bilde.jpg -resize 100x100 bilde.jpg");

 

shis paarveidos bildi taa, lai neviena dimensija neparsniedz 100px. proporcijas tiks saglabaatas.

jaabuut uzinstaleetam imagemagick-bin. un darbojas daudz aatraak nekaa tiira php risinaajums.

Link to comment
Share on other sites

un darbojas daudz aatraak nekaa tiira php risinaajums.

php GD ir kādas 2-3x (ja ne vēl) atrāks par IM .. nemaz nerunājot ja vienlaicīgi jaresaizo vairākas bildes tad Magicks un kaste atpūšas vispār.

 

 

 

Kaut kāds fiksais kods no arhīviem:

 

function thumb($source, $dest, $w = 0, $h = 0)
{

       $size = getimagesize($source);

       if ($w && $size[0] > $w) {
               $ratio = $size[0] / $w;
       } elseif($h && $size[1] > $h) {
               $ratio = $size[1] / $h;
       }

       $ratio = max($ratio, 1.0);
       $w = (int)($size[0] / $ratio);
       $h = (int)($size[1] / $ratio);

       if($w && $h) {

               $resize = imagecreatetruecolor($w, $h);

               if($size[2] == 2)  {
                       $img = imagecreatefromjpeg($source);
                       imagecopyresampled($resize, $img, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
                       imagejpeg($resize, $dest,95);
               } elseif($size[2] == 1) {
                       $img = imagecreatefromgif($source);
                       imagecopyresampled($resize, $img, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
                       imagegif($resize, $dest);
               } elseif($size[2] == 3) {
                       $img = imagecreatefrompng($source);
                       imagecopyresampled($resize, $img, 0, 0, 0, 0, $w, $h, $size[0], $size[1]);
                       imagepng($resize, $dest);
               }

               imagedestroy($img);
               return filesize($dest);

       } else { return 0; }
}

 

Lietojums apmēram šāds (atgriež thumbnaila faila izmēru vai 0):

<?
thumb('vecabilde.jpg','thumbnails.jpg',[opcionaals_max_platums],[opcionaals_max_augstums]);
?>

Primārais tiek ņemts vērā platums (var sakombinēt kā vajag proti ņemt vērā mazāko izmēru utt).

Link to comment
Share on other sites

php newbie, tavs dotais links ir vnk awesome.

Tik viens jautājums palicis. Īsti neatradu tur dokumentāciju, kur būtu par to rakstīts, bet nu, ja teiksim ir resizeToW 200.

Kā varētu iegūt, ja teiksim bildes W ir 120, tad nekas netiek resaizots (tas pats ar H). Jautājums ir vai šāda iespēja ir iestrādāta.

Link to comment
Share on other sites

es to izmantoju lai veidotu thumbnails. nemēģināju palielināt, bet apskatijos kodu un tīri teorētiski tā māk arī palielināt.

 

tā klase izmanto php funkciju imagecopyresampled un php.net aprakstā "If the source and destination coordinates and width and heights differ, appropriate stretching or shrinking of the image fragment will be performed."

Link to comment
Share on other sites

Atļauts ir.

array(12) { ["GD Version"]=> string(27) "bundled (2.0.34 compatible)" ["FreeType Support"]=> bool(true) ["FreeType Linkage"]=> string(13) "with freetype" ["T1Lib Support"]=> bool(true) ["GIF Read Support"]=> bool(true) ["GIF Create Support"]=> bool(true) ["JPG Support"]=> bool(true) ["PNG Support"]=> bool(true) ["WBMP Support"]=> bool(true) ["XPM Support"]=> bool(true) ["XBM Support"]=> bool(true) ["JIS-mapped Japanese Font Support"]=> bool(false) }
Bet interesanti ir tas, ka vecais kods, kas uz cita hostinga gāja ar PNG, tagad arī ar PNG neiet.
PNG Support is enabled
Edited by anonīms
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...