webForumDet fria alternativet

Visa bildnamn, storlek, höjd och bredd

PHP

9 svar · 675 visningar · startad av addeweb

Medlem sedan jan. 2004216 inlägg
Frågan#1

Jag har sökt svaret på hur man löser det där med att visa aktuell
bilds namn, storlek och ev höjd/bredd när man öppnar ett
formulär-sida till en visningssida men tyvärr fanns det inte någon
lösning. Finns det någon som har gjort något liknande? Man ska
nog lägga in dessa uppgifter i databasen också. GetImageSize()
ska man nog också använda.

Medlem sedan dec. 2003153 inlägg
#2

list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");

Här behöver nog inte $width eller $height en förklaring, men de andra.
$type är filken filtyp bilden är. Vad siffran står för hittar du i manualen för getimagesize().
$attr innehåller strängen "height=64 width=32" om bilden är 64px hög och 32px bred.
Vad är det som inte funkar?

Medlem sedan jan. 2004216 inlägg
#3

Så här ser koden ut:

<?php
if (isset($_POST['submit'])) { 
   $twoMB= 2 * 1048576;

	if (is_uploaded_file($_FILES['pict']['tmp_name'])
		and ( $_FILES['pict']['size'] < $twoMB )) {
		
		$pictureFile = "";
		$pictureFile = $_FILES['pict']['tmp_name'];
		$name = $_FILES['pict']['name'];
		$size = $_FILES['pict']['size'];
	
	/** **************************************
	*	Här tar jag ut om de är jpg eller inte
	*/
		$ending = substr($name, -3);
		$ending =  strtolower($ending);

	/** **************************************
	*	I denna if-sats kontrolleras det om
	*	filen är mindre än två MB och att det är
	*	en jpeg-bild.
	*/
		if ( ($size <= $twoMB ) and ( $ending == 'jpg')){
			
			
		$picture 	= imageCreateFromJpeg($pictureFile);

	/** *********************************************************
	*	Här plockar jag ut de aktuella dimensionerna på bilden.	
	*/
		$image	= $picture;
		$width 	= imagesx($picture);
		$height = imagesy($picture);
		$newSize = 120;
		if ( $width > $newSize )
		{
			$radie 		= $newSize / $width;
			$newWidth 	= round($width*$radie);
			$newHeight	= round($height*$radie);
		}  else if ( $height > $newSize ) {
			$radie 		= $newSize / $width;
			$newWidth 	= round($width*$radie);
			$newHeight	= round($height*$radie);
		} else {				
			$newPicture = imageCreateTrueColor($width, $height);
			$newWidth  = $width;
			$newHeight = $height;
		}
		if ( $newHeight > $newSize )
		{
			$radie 		= $newSize / $newWidth;
			$newWidth 	= round($newWidth*$radie);
			$newHeight	= round($newHeight*$radie);
		}	
		$newPicture = imageCreateTrueColor($newWidth, $newHeight);
		ImageCopyResized($newPicture, $picture, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
		

	//  chmod(images/users/$name, 0777);
		/** ***************************************
		*	Här sparas bilden samt rawdata raderas
		*/
			imagejpeg($newPicture, "images/teqla.jpg"); 

			imagedestroy($newPicture);

		/** *****************************************************************/
			

		echo "
				Bilden du laddade in var storlek: $width x $height<BR />
			 	Den nuvarande storleken är: $newWidth x $newHeight<br />
		        Bilden är sparad <a href=\"teqla_uppdate.php\">[ Tillbaka ]</a>";
		    }
	} else {
		echo "
			<br />Bilden är inte sparad<br />
			Antingen så var det fel format på bilden eller var bilden för stor<br />
			<a href=\"teqla_uppdate.php\">[ OK ]</a>";}	
} 
if (!isset($_POST['submit'])) { ?>
<form name="form2" method="post" action="<?=$_SERVER['PHP_SELF']?>"  ENCTYPE="multipart/form-data">
	<tr><td><br /><br /><b>Ladda upp bild:</b><br /><input name="pict" type="file" size="40" class="input">&nbsp;
<input type="submit" name="submit" value="Ladda" class="button" /></td></tr>
	</form>
<?php } ?>

För tillfället visas det inte något om bildens uppgifter. Echo-sats
ska läggas till i den andra isset-delen nere. Bilden laddas upp
från disken men uppgifterna ska nog hämtas från tabellen, tror jag.
När det gäller att byta bild, då ska man nog göra det med en
update-fråga för bilduppgifterna överst. Min partner har bett mig
att försöka lösa det här men jag känner inte till mycket om bilder
kontra PHP. Finns det någon bra lösning på det här?

Medlem sedan jan. 2004216 inlägg
#4

Hur ska jag se till att getImagesize() passar in nånstans i koden? Sedan ska man lägga in bildens format(höjd, bredd), storlek och namn i datasen.

Medlem sedan dec. 2003153 inlägg
#5

getImagesize() kan du ju lägga in direkt efter $pictureFile, såhär:
$pictureFile = $_FILES['pict']['tmp_name'];
$pictureInfo = getImageSize($_FILES['pict']['tmp_name']);

Eller som jag skrev ovan, med list().

Medlem sedan jan. 2004216 inlägg
#6

Den fungerar nu. Tack för hjälpen!

Medlem sedan jan. 2004216 inlägg
#7

Jag tänkte på en annan sak med tanke på bildens bredd och
höjd. I koden ovan finns en variabel $newsize med värdet 120
som gör att bildens bredd blir 120 pixlar efter att bilden har
laddats upp. Att ha en stående bild går bra med den bredden
men om man istället använder en liggande bild, då blir den
liten. Hur gör man då så att det inte ska spela någon roll om
bilden är stående eller liggande? Bilden ska inte heller bli
förvrängd. Hur löser jag det?

Medlem sedan dec. 2003153 inlägg
#8

Jag postade en länk [1] i en annan tråd här på wF. I de funktionerna ändras alltid bilden till 100px bred och höjden justeras proportionellt mot det. Använd den kod-raden:
$h = ceil(($imagedata[1] / $imagedata[0]) * $w); // To keep relations
Kolla proportionerna på bilden för att veta hur du ska ändra storlek på den...

http://www.pho.nu/forum/f23t32.html

Medlem sedan jan. 2004216 inlägg
#9

Det fungerar nu.

Medlem sedan sep. 200412 inlägg
#10

.

..

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)