Gå til innhold

Mekke et bildegalleri i php


Anbefalte innlegg

Jeg holder på å mekke mitt "eget" php galleri med mysql. Har lånt kode til å resize bildene men får det ikke til.

 

//image_resize.php
<?php

//  Create source image and dimensions
$src_img = imagecreatefrompng($_GET['image']);
$srcsize = getimagesize($_GET['image']);
$dest_x = 200;
$dest_y = ($dest_x / $srcsize[0]) * $srcsize[1];
$dst_img = imagecreatetruecolor($dest_x, $dest_y);

//  Resize image
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y, $srcsize[0], $srcsize[1]);

//  Output image
header("content-type: image/jpeg");
imagejpeg($src_img);

//  Destroy images
imagedestroy($src_img);
imagedestroy($dst_img);

?>


// Image using the resize
<img src=image_resize.php?image="pic.jpg"/>

 

Koden var egentlig for png bilder, men jeg trodde jeg hadde endret på koden slik at det funker for mine .jpg bilder

Lenke til kommentar
Videoannonse
Annonse

Endre denne linjen

$src_img = imagecreatefrompng($_GET['image']);

til

$src_img = imagecreatefromjpeg($_GET['image']);

 

Har du forresten innstallert GD biblioteket?

 

Du bør også sjekke at $_GET['image'] er er satt og inneholder referanse til gyldig bilde.

 

f.eks

if (isset($_GET['image']) && !empty($_GET['image'])) {
$src_img = imagecreatefromjpeg($_GET['image']);

//Sjekke at $src_img er gyldig ressurs
if($src_img) {
	//endre størrelse på bilde osv...
}
else {
	echo 'Fant ikke bilde, eller ugyldig bildeformat';
}
}
else {
echo 'bilde-url eller fil-referanse mangler'; 
}

Lenke til kommentar

Det er fremdeles noe galt. I steden for bilder får jeg bare frem tynne svarte fliser (guess 20px høy og 5px vid kanskje?) der bildene skulle ha hvert :(

 

Resizekoden:

<?php

// Create source image and dimensions
$src_img = imagecreatefromjpeg($_GET['image']);
$srcsize = getimagesize($_GET['image']);
$dest_x = 200;
$dest_y = ($dest_x / $srcsize[0]) * $srcsize[1];
$dst_img = imagecreatetruecolor($dest_x, $dest_y);

// Resize image
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y, $srcsize[0], $srcsize[1]);

// Output image
header("content-type: image/jpeg");
imagejpeg($src_img);

// Destroy images
imagedestroy($src_img);
imagedestroy($dst_img);

?>

 

 

PHP koden:

$result = mysql_query("SELECT * FROM gal_test") or die(mysql_error());
while($row = mysql_fetch_array($result))
{
echo "	<a href=" . $row['url'] . " target=_blank>";

echo "	<img src=/galleri/galleri_image_resize.php?image=" . $row['url'] . "/></a>";
}

 

Fra php koden er det da meninga at brukeren skal klikke på det for å få et større et... noen som ser noe galt? :D url er en rad og feks info er "/galleri/test/bilde1.jpg" uten""

Endret av South_Bridge
Lenke til kommentar
Gjest Slettet+142

Er det ikke imagejpeg($dst_img); du må bruke? De resizede bildet fra imagecopyresampled havner vel i alle fall i $dst_img om jeg ikke har sett feil.

Lenke til kommentar

Jeg kjører samme script, men jeg bruker fast str på bildene

 

<?php
//  Create source image and dimensions
$src_img = imagecreatefromjpeg($_GET['img']);
$srcsize = getimagesize($_GET['img']);
$dest_x = 350;
$dest_y = 300;
$dst_img = imagecreatetruecolor($dest_x, $dest_y);

//  Resize image
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y, $srcsize[0], $srcsize[1]);

//  Output image
echo imagejpeg($dst_img);

//  Destroy images
imagedestroy($src_img);
imagedestroy($dst_img);
?>

Lenke til kommentar

ser du setter både høyden og bredden... burde du ikke ha fulgt matematikken på y? har jo egentlig ingen mening om du setter x, og y og ikke tar med ratioen. da kunne du kanskje ha gjort denne jobben enklere med html/css med å sette høyde og vidde?

 

Når jeg bruker koden din får jeg mye av dette:

 

Sº’4Ûåà¶ÝÎ3úæ¾_­ˆ—¿+þGT)¥²&¾½{ˆÙ €ÀúôúþUÈ&SÍù‡ÞaÛéUüÃ(TƒÁ=°}jxÜl+åùJÿ�ŸZâ–»›%m…3ÛÕ†ã�3.x¦HÑÉuÛ–ØO%WŒgê}*¨2‰›z#Mû_ø×ðïQÙÃ,Á±E$6Aê3õ¨åIîR×s~}Ž±ùR3(Îp£¥rwž+ÖnhtÙ1203À? ¯é]uÄF-ªI–Û×W“G¬On—zqRIIsëÏçÞ»0²Jç˜MÅFÎ×¹¸þ/YtÙMçÏya<£³Ï'“Øzñ\M÷ˆä¹¿ß©ÁF0…bR¯ŽÊOR=ò)uX&ò^hðxÏCÆN{䎞¢°á‚MJyÊ—P� œøs^–ÓŒ=¢Iwf4ÝYÅ)·sbñ´Í&䥂G¨Ìpþ}Ì"ƒÈ ™Á8#$çè+wDñEÓ."¿†;i™µ]¾h¹ïþ{Wso-ÁŠLç A'¨#Š˜Åö$qDw¢, 9�dçõ®¹UæºèÂPr³“÷—S¦‡Ç 4¬¦ÊÞe'b²‡e÷ Ô¥fk:¦›¥]O¨Y0ÔfÔ›Ï0ÝGºqÈÃ)'{g8ÏLt®~s1$•Áèi.l˜ª»©Xæ@èGL‚AÇâ)Ñz´EX%fŽÃ:ÕÆ«¬Cy,QG=‘ ’¡”rcÚ8dŒÏ®k­¼Â^2¾Û}j°Þyä0•ù<®›o­pþ’nÞD›FüŸ½Ô{c·ã]–§áöŸÄo>É"5®ö@1ƒ»#øMrãç\îÍ'f¾Gn)§o/Ôu—‚t-øÝÙX“:ŽG2(ÿ�w<Ï?J+* JëLÔY.­]Êü²+3)_OΊà­J£•Ûæó¿üÓQ²ÓCŠºÔžæBYŽ*(˜Èù¢ŠûFÛGŠKBÍåÄ·R‚ÁBŒ�? [->k©U"‰å•ÎK1

 

på echo imagejpeg($dst_img);. Jeg tror da at bilde blir lest feil... men vet ikke. Har prøvd litt frem og tilbake.

Endret av South_Bridge
Lenke til kommentar

Regner med at feilen i ditt script er at du har feil path til bildene du prøver å laste inn.

 

Ser av det du har skrevet at bildene ligger i /galleri/test/ mens galleri_image_resize.php

ligger i /galleri/.

Når scriptet tar imot /galleri/test/bilde1.jpg vil det lete i /galleri/galleri/test/ som er feil path til bildet.

 

Har du forresten feilrapportering påslått? Det kan virke som du ikke har det da du vil få endel feilmeldinger med det på.

 

På en utviklingsserver bør man ha feilrapportering påslått, eller i det minste legge til denne linja øverst i koden.

error_reporting(E_ALL);

 

Hvorfor benytter du deg ikke av koden jeg skrev tidligere? Det er ikke en ulempe å gjøre script litt mere robust mot eventuelle feil som kan oppstå.. Det er også lettere å finne hvor en feil oppstår om man legger inn sjekk på om funksjoner som kan feile returnerer korrekt data som f.eks imagecreatefromjpeg().

 

Her er en utgave som fungerer og håndterer feil ved manglende bilde eller ugyldig bildeformat.

<?php

//Sjekke at bilde-url er satt i url
if (isset($_GET['image']) && !empty($_GET['image'])) {

$src_img = @imagecreatefromjpeg($_GET['image']);

//Sjekke at $src_img inneholder gyldig ressurs
if ($src_img) {
	$srcsize = getimagesize($_GET['image']);
	$dest_x = 300;
	$dest_y = ($dest_x / $srcsize[0]) * $srcsize[1];
	$dst_img = imagecreatetruecolor($dest_x, $dest_y);
	//Resize image
	imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y, $srcsize[0], $srcsize[1]);		
	// Output image
	header("content-type: image/jpeg");
	imagejpeg($dst_img);

	// Destroy images
	imagedestroy($src_img);
	imagedestroy($dst_img);
} else {
	echo 'Fant ikke bilde eller ugyldig bildeformat';
	exit();
}
} else {
echo 'bilde-url eller fil-referanse mangler';
exit();
}
?>

Lenke til kommentar

Nå har jeg endret litt på koden, for jeg innser at det er smartere å lage et thumb av et bilde når du laster det opp enn at alle besøkende skal stresse CPUen på serveren med matematikken bak resizinga.

 

if(isset($_POST['addpic']))
{

//?heck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0))
{
//Check if the file is JPEG image and it's size is less than 350Kb
 	$filename = basename($_FILES['uploaded_file']['name']);
 	$ext = substr($filename, strrpos($filename, '.') + 1);
 	if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && ($_FILES["uploaded_file"]["size"] < 350000)) 
   {
      	//Determine the path to which we want to save this file
     	$newname = dirname(__FILE__) . "/galleri". $filename;
     	//Check if the file with the same name is already exists on the server
     	if (!file_exists($newname))
       {
       	//Attempt to move the uploaded file to it's new place
       	if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname)))
           {
          		echo "<p>Suksess, filen ble lagret som: " . $newname . "</p>";


$filename = "galleri" . $filename;
//Sjekke at bilde-url er satt i url
//if (isset($_GET['image']) && !empty($_GET['image'])) {

   $src_img = @imagecreatefromjpeg($filename);//$_GET['image']);

   //Sjekke at $src_img inneholder gyldig ressurs
   if ($src_img) 
{
       $srcsize = getimagesize($filename);
       $dest_x = 200;
       $dest_y = ($dest_x / $srcsize[0]) * $srcsize[1];
       $dst_img = imagecreatetruecolor($dest_x, $dest_y);
       //Resize image
       imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_x, $dest_y, $srcsize[0], $srcsize[1]);        
       // Output image
       header("content-type: image/jpeg");
       imagejpeg($dst_img);

       // Destroy images
       imagedestroy($src_img);
       imagedestroy($dst_img);
   } 
else
{
       echo 'Fant ikke bilde eller ugyldig bildeformat';
       exit();
   }
//} else {
//    echo 'bilde-url eller fil-referanse mangler';
//    exit();
//}


       	} 
           else 
           {
          		echo "<p>Det skjedde en feil ved opplastingen!</p>";
       	}
	}
   	else
   	{
    		echo "<p>Error: Fil ".$_FILES["uploaded_file"]["name"]." finnes allerede!</p>";
   	}
}
else
{
	echo "<p>Error: Bare JPEG bilder under 350Kb kan lastes opp!</p>";
}
}
else
{
echo "<p>Error: Ingen fil ble lastet opp!</p>";
}
}

 

Dette er da et php dokument som poster til seg selv. Formen inneholder browser tingen og jeg får lasta opp bilde til serveren! Litt rar navn det får da, siden galleri blir lagt til. Men dette fungerer da. Det som ikke fungerer er den resize tingen... Jeg har hittil bare valgt å poste den ut som en del av svaret når du laster opp et bilde for å se at det fungerer

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...