raivis Posted November 25, 2004 Report Share Posted November 25, 2004 Piemēram man ir bilde 700x400px izmeeraa un ar PHP veelos proporcionaali korigjeet taas izmeers> uz 150x90px Kā tas būtu izdarāms? Link to comment Share on other sites More sharing options...
hu_ha Posted November 25, 2004 Report Share Posted November 25, 2004 nē es jau neko nesaku, bet te izkausās pēc vienas vieīgas klaigāšanas. tu esi apskatījies, kā samazina bildes? ar ko to dara, kas tam vajadzīgs? jeb varbūt nākamais jautājums būs - a kā izdarīt to... apskaties GD bilbiotēku un tur funkcijas, kas saistītas ar image http://lv.php.net/manual/en/ref.image.php getimagesize -- Get the size of an image imagecreate -- Create a new palette based image imagedestroy -- Destroy an image imagecreatefromjpeg -- Create a new image from file or URL etc un lai samazinaatu bildi proporcionāli, es domāju, ka pietiks pazīmēt uz lapiņas, kā jāsamazina garums un kā platums, lai būtu proporcionāli (ja nevar citādi) Link to comment Share on other sites More sharing options...
raivis Posted November 25, 2004 Author Report Share Posted November 25, 2004 (edited) Kur kļūda? $picpath = "img/"; $filename = "bilde.jpg"; $pic_type = GetImageSize($picpath . $row["filename"]); $img_in = ImageCreateFromJPEG($picpath . $row["filename"]); $w = $_GET["w"]; $h = $_GET["h"]; if ($w) { $h = round(($w / $pic_type[0]) * $pic_type[1]); } elseif ($h) { $w = round(($h / $pic_type[1]) * $pic_type[0]); } $img_out = @ImageCreateTrueColor($w, $h); imagecopyresampled($img_out, $img_in, 0, 0, 0, 0, $w, $h, $pic_type[0], $pic_type[1]); Header("Content-type: image/jpeg"); ImageJPEG($img_out); die(); Man met laukā: Warning: getimagesize(img/) [function.getimagesize]: failed to open stream: Permission denied in c:\wamp\www\samples\05\GDimage\img2.php on line 5 Warning: imagecreatefromjpeg(img/) [function.imagecreatefromjpeg]: failed to open stream: Permission denied in c:\wamp\www\samples\05\GDimage\img2.php on line 6 Warning: imagecopyresampled(): supplied argument is not a valid Image resource in c:\wamp\www\samples\05\GDimage\img2.php on line 15 Warning: Cannot modify header information - headers already sent by (output started at c:\wamp\www\samples\05\GDimage\img2.php:5) in c:\wamp\www\samples\05\GDimage\img2.php on line 16 Warning: imagejpeg(): supplied argument is not a valid Image resource in c:\wamp\www\samples\05\GDimage\img2.php on line 17 Edited November 25, 2004 by raivis Link to comment Share on other sites More sharing options...
raivis Posted November 25, 2004 Author Report Share Posted November 25, 2004 Paldies! - atkodu pats: <?php //links: img3.php?s=143094.jpg&h=100 , kur s=bildes nosaukums, w=attēla platums, h=attēla augstums // Vieta, kura atradīsies attēls $pth = "img/" . $s; // Noskaidrojam kāda veida attēlus atbalsta pašreizējais GD if (imagetypes() &IMG_PNG) { $suport["PNG"] = true; } if (imagetypes() &IMG_GIF) { $suport["GIF"] = true; } if (imagetypes() &IMG_JPG) { $suport["JPG"] = true; } if (imagetypes() &IMG_WBMP) { $suport["BMP"] = true; } // Noskaidrojam visu infromāciju par rādāmo attēlu $pic_type = GetImageSize($pth); // Noskaidrojam attēla tipu un iestādam, // vai ir iespējams attēlam mainīt izmērus if ($pic_type[2] == 2 and $suport["JPG"]) { $USE_RESIZE = true; $img_in = ImageCreateFromJPEG($pth); } elseif ($pic_type[2] == 3 and $suport["PNG"]) { $USE_RESIZE = true; $img_in = ImageCreateFromPNG($pth); } elseif ($pic_type[2] == 1 and $suport["GIF"]) { $USE_RESIZE = true; $img_in = ImageCreateFromGIF($pth); } elseif ($pic_type[2] == 6 and $suport["BMP"]) { $USE_RESIZE = true; $img_in = ImageCreateFromWBMP($pth); } else { $USE_RESIZE = false; } // Ja jaunā attēla lielums nav bijis norādīts, izvada attēlu bez izmaiņām if (!$w and !$h) { $USE_RESIZE = false; } $w = $_GET["w"]; $h = $_GET["h"]; if ($w) { $h = round(($w / $pic_type[0]) * $pic_type[1]); } elseif ($h) { $w = round(($h / $pic_type[1]) * $pic_type[0]); } if ($USE_RESIZE) { // Maina attēla izmērus // Ja iespējams kā jaunu veidojam TrueColor attēlu (GD2 un jaunāki) if (!$img_out = @ImageCreateTrueColor($w, $h)) { $img_out = ImageCreate($w, $h); } ImageCopyResized($img_out, $img_in, 0, 0, 0, 0, $w, $h, $pic_type[0], $pic_type[1]); // Izvadam izveidoto attēlu kā JPG Header("Content-type: image/jpeg"); ImageJPEG($img_out); } else { // Ja nav iespējams mainīt attēla lielumu // Nolasam attēlu un parādam to, tādu pašu kā ir $fp = fopen($pth, "rb"); if ($pic_type and $fp) { header("Content-type: {$pic_type['mime']}"); fpassthru($fp); exit; } } ?> Link to comment Share on other sites More sharing options...
hu_ha Posted November 25, 2004 Report Share Posted November 25, 2004 Warning: getimagesize(img/) [function.getimagesize]: failed to open stream: Permission denied in c:\wamp\www\samples\05\GDimage\img2.php on line 5 vai nu bilde tur neatrodas vai arī tev nav pieejas pie tās direktorijas.. Warning: imagecopyresampled(): supplied argument is not a valid Image resource in c:\wamp\www\samples\05\GDimage\img2.php on line 15 tā kā bildi neatrada, tātad nav korekts stream no kurienes ņemt datus Warning: Cannot modify header information - headers already sent by (output started at c:\wamp\www\samples\05\GDimage\img2.php:5) in c:\wamp\www\samples\05\GDimage\img2.php on line 16 tā kā noticis izvads uz ekrāna (iespējams, ka kļūdas paziņojumi to radījuši), tad headrei jau nosūtīti - kā zināms, tad šamie ir jāsūta pirms jebkura izvada... Link to comment Share on other sites More sharing options...
raivis Posted November 25, 2004 Author Report Share Posted November 25, 2004 Bet tomēr vēl neesmu ticis skaidrībā - ja man ir bilde 400x700px izmeeraa un man uz PHP vajag proporcionaali korigjeet taas izmeeru, apgriežot liekās malas, lai iekļautos izmēros: 150x50px, bet ja gadījumā $bilde neiekļaujas izmēros 150x50px, tad lai proporcionāli tā palielinās, lai iekļautos noteiktos izmēros!? » bet kā? Link to comment Share on other sites More sharing options...
hu_ha Posted November 25, 2004 Report Share Posted November 25, 2004 nu šeit nāksies nedaudz padomāt matemātiski: ja bilde ir 15 x 30 un vajag 10 x 10, tad noteicošais faktors noteikti ir garākā mala - tātad atrodam garāko malu -> 30 un salīdzinam ar pieļaujamo 10/30=0.3 tātad bilde jāreizina ar 0.3 lai dabūtu ka viena mala ir 10, bet otra proporcionāli mazāka; ja ir bilde mazāka (5x7), tad atkal ņemam lielāko malu un salīdzinam ar maksimāli pieļaujamo, t.i. 10 10/7= 1. ..., kur ar šo koeficientu pareizinam abas bildes malas... Link to comment Share on other sites More sharing options...
raivis Posted November 26, 2004 Author Report Share Posted November 26, 2004 ?un php kods izskatiitos.. Link to comment Share on other sites More sharing options...
bubu Posted November 26, 2004 Report Share Posted November 26, 2004 (edited) Jopcig! Cik tev gadu? Kāpēc tu domā, ka šeit ir bērnu krāsojamā grāmata!?! Tev hu_ha tak pastāstīja algoritmu, tad nu arī raksti! # dots $x0, $y0 - bildes izmēri # vajag $x, $y - bildes rezultējošos izmērus if ($x0>$y0) { $aspect = $x/$x0; $y = $y0/$aspect; } else { # šo daļu, kad $y0<$x0 atļaušu tev pašam izdomāt!;) } # tagad $x un $y satur izmērus ne lielākus par sākotnējiem $x un $y # un uz kuriem mainot bildi, nemainīsies proporcijas Edited November 26, 2004 by bubu Link to comment Share on other sites More sharing options...
tamster Posted November 26, 2004 Report Share Posted November 26, 2004 bubu: a ja width un height ir vienādi? :) man nesen ievajadzējās, sanāca k-kas šitāds Link to comment Share on other sites More sharing options...
bubu Posted November 26, 2004 Report Share Posted November 26, 2004 Ja $x0=$y0, tad izpildīsies else daļa. Principā tādā gadījumā ir pilnīgi vienalga, kura daļa izpildās, manuprāt. Nu lab vienīgā mana kļūda ir tas komentārs $x0<$y0 vietā jābūt <=, bet tas jau neko daudz nemaina, kā nekā - komentārs ;) Link to comment Share on other sites More sharing options...
Recommended Posts