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.
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?
<?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">
<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?
getImagesize() kan du ju lägga in direkt efter $pictureFile, såhär:
$pictureFile = $_FILES['pict']['tmp_name'];
$pictureInfo = getImageSize($_FILES['pict']['tmp_name']);
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?
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...