Om jag ska tillåta uppladdning av bilder, vill jag kunna skala ner bilderna till "lagom" format innan jag sparar dem på fil. Går det?
Kan man ändra bildstorlek med PHP?
17 svar · 3 222 visningar · startad av kluringen
Kika på https://github.com/avalanche123/Imagine
Manual finns att läsa på http://imagine.readthedocs.org/en/latest/index.html
Php GD eller något pluginprogram. Enklast med gd dock.
Hej alla hjälpsamma duktiga forumvänner!
Är på väg att ge upp det här med bilder, har kört fast redan i det första steget. Mitt program laddar bara upp bilder som jag har skalat ner manuellt.
Gränssnittet mot Tinymce:
<?php session_start();?>
<!DOCTYPE html>
<html>
<head >
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" href="stilmall.css" type="text/css" />
<style type="text/css">
</style>
<title>info</title>
<script type="text/javascript" src="js/tiny_mce/tiny_mce.js"></script>
<script type="text/javascript">
tinyMCE.init({
mode : "textareas",
language : "sv",
theme : "advanced",
theme_advanced_buttons1 : "bold,italic,underline,strikethrough,fontselect,fontsizeselect,|,forecolor,undo",
theme_advanced_buttons2 : "",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
content_css : "stilmall.css",
theme_advanced_font_sizes : "Liten=12px, Normal=16px, Stor=20px",
forced_root_block : '',
force_br_newlines : true,
force_p_newlines : false
});
</script>
</head>
<body>
<?php $_SESSION['sida'] = 'z-edit.php';
$_SESSION['version'] = 0;
$_SESSION['visa'] = " ";
?>
<?php include ("menylista.php"); ?>
<div id="storruta">
<h1>Uppdatering av webbsidor</h1>
<div id="knapp3">
<form id="avbryt" name="avbryt" action="z-cancel.php">
<input type="submit" name="submit" id="submit" value="Avbryt" />
</form>
</div>
<div id="knapp">
<form id="bild" name="bild" action="z-utforska.php">
<input type="submit" name="submit" id="submit" value="Ladda" />
</form>
</div>
<form id="textfil" name="textfil" method="post" action="z-skriv.php">
<fieldset>
<textarea name="gruppsida" id="gruppsida" cols="65" rows="20"><?php
$filnamn = $_SESSION['filnamn'];
$file = fopen($filnamn, "r");
$innehall = fread($file, filesize ($filnamn));
$_SESSION['sparversion'] = $innehall;
echo $innehall;
fclose($file);?>
</textarea> <p>
<!--<label for="submit"></label> -->
<input type="submit" name="submit" id="submit" value="Spara" />
</fieldset>
</form>
<p>
<a href="z-restore.php"><span class="storre">Hämta en sparad version</span></a>
</div>
</body>
</html>
Öppnar clientens utforskare:
<?php session_start();?>
<!DOCTYPE html>
<head >
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" href="stilmall.css" type="text/css" />
<style type="text/css">
</style>
<title>utforska</title>
</head>
<body>
<?php $_SESSION['sida'] = 'z-utforska.php';
//$_SESSION['sida1'] = 'z-utforska.php';
?>
<?php include ("menylista.php"); ?>
<div id="storruta">
<h1>Ladda upp en fil</h1>
<form method="post" action="z-ladda.php" enctype="multipart/form-data">
<input type="file" id="file" name="file" onchange='submit()'>
</form>
</div>
</body>
</html>
Tar hand om det som blev uppladdat:
<?php session_start();?>
<!DOCTYPE html>
<html>
<head >
<meta charset="UTF-8">
<meta name="robots" content="noindex, nofollow">
<link rel="stylesheet" href="stilmall.css" type="text/css" />
<style type="text/css">
</style>
<title>ladda</title>
</head>
<body>
<?php $_SESSION['sida'] = 'z-ladda.php';
?>
<?php include ("menylista.php"); ?>
<?php $_SESSION['filen']=$_FILES["file"]["name"];?>
<div id="storruta">
<h1>Laddar upp vald fil</h1>
<?php
move_uploaded_file ($_FILES["file"]["tmp_name"], $_SESSION['mapp']."/" . $_FILES["file"]["name"]);
?>
<?php
if ($_FILES["file"]["type"]=="image/pjpeg"){
/*
$bild= $_SESSION['mapp']."/".$_FILES["file"]["name"];
list($width, $height) = getimagesize($bild);
echo $width." ".$height;
echo " ";
echo $_FILES["file"]["type"];
*/
$filnamn = $_SESSION['filnamn'];
$file = fopen($filnamn, "r");
$innehall = fread($file, filesize ($filnamn));
fclose($file);
$divdel="<div class=\"bild-v-260\">";
$imgdel="<img src=\"".$_SESSION['mapp']."/".$_FILES["file"]["name"]."\""." alt=\"bild\"></div>";
$nyinnehall = $divdel.$imgdel.$innehall;
$file = fopen($filnamn, "w");
fwrite($file, $nyinnehall);
fclose($file);
exit;
}
?>
<?php if ($_FILES["file"]["type"]=="application/pdf"):?>
<p>
Ange en text till länken<p>
<div id="knapp">
<form id="avbryt" name="avbryt" action="z-cancel.php">
<input type="submit" name="submit" id="submit" value="Avbryt" />
</form>
</div>
<form method="post" action="z-lank.php">
<fieldset>
<input type="text" name="text" id="text" size="50"><p>
<input type="submit" name="submit" id="submit" value="Skicka">
</fieldset>
</form>
<?php endif ?>
</div>
</body>
</html>
Hade börjat testa lite att manipulera bildstorleken (kod bortkommenterad) men det fungerar bara om jag lägger bilden på disk först (får inte tag på värden från tempfilen).
I övrigt funkar det. Måste slutanvändaren manipulera bilderna själva för att jag överhuvudtaget ska kunna ladda upp dem, kan de ju lika gärna göra hela jobbet med lite hjälpinstruktioner själva? Bilder som jag har skalat ner som jag vill ha dem läggs ut snyggt o prydligt så jag är frestad att nöja mig med det om det inte finns något enkelt sätt att komma förbi det första hindret.
men det fungerar bara om jag lägger bilden på disk först (får inte tag på värden från tempfilen).
Är det verkligen ett problem då? Om det inte går att manipulera tempfilen, spara filen till disk först och öppna den därifrån.
mvh
men det fungerar bara om jag lägger bilden på disk först (får inte tag på värden från tempfilen).
Är det verkligen ett problem då? Om det inte går att manipulera tempfilen, spara filen till disk först och öppna den därifrån.
mvh
Det problemet är ju lätt att komma runt precis som du säger. Värre är att originalfilen inte laddas inte upp alls. Först efter att jag skalar ner bilden manuellt kan jag ladda den. Då känns det ju meningslöst att låta bli att skala ner den helt och hållet till presentabelt skick. Det ställer ju inte större krav på användaren att skala bilden till "färdig" storlek än att skala den till laddbart skick.
Menar du att bilden är för tung (dvs för många bytes) för att du ska kunna spara den? Vilka tyngder pratar vi om?
3072 x 2304 px (alla)
2,3 upp till 3,8 Mb, vet inte varför det varierar, har använt samma kamera
Om det beror på att filerna är för stora kanske du kan ändra i php.ini om du har tillgång till det?
echo $_FILES["file"]["error"];
ger returkod 1. Hur vet jag vad det betyder? Så att jag angriper rätt orsak?
Tack walter groupius, och tack @nders. Nästa fråga: Måste jag ladda ner nåt för att få till php.ini filen? Blir jag tvungen att gräva i Apache konfigurationen också på min lokala server? Jag fick en länk av @nders, där finns en upload länk i texten. Får lite kalla fötter när jag inte vet vad som händer sen.
Default inställningen för max uppladdningsstorlek är 2 Mb i php.ini
Har du sidan på ett vanligt webbhotell så har du nog inte så du kan ändra några inställningar i php.ini
Kolla vad du har för inställningar på servern med phpinfo()
/red
Använd ini_set() för att ändra upload_max_filesize i scriptet om du inte har tillgång till php.ini på servern.
Det ska räcka att ändra i php.ini om du har tillgång till den. /etc/php5/apache2/php.ini om du har en linux-server. Du ska inte behöva ladda ner något, utom att du kanske ska installera en texteditor. nano brukar finnas med.
Om du inte har tillgång till php.ini så är det inte säkert att ini_set() fungerar heller. Men värt ett försök.
KUL! Jag hittade php.inifilen, ändrade upload_max_filesize till 4M och det fungerar. På den riktiga servern hos Loopia får jag väl be supporten om hjälp men först vill jag se att jag lyckas skala bilden också.
Ny fråga. Alla mina originalbilder har filändelsen "JPG". Kan jag ostraffat ändra till "jpg" i programmet? Det blir ju knas om det görs i utforskaren, jag brukar göra spara som i picturemanager.
Jag lär nog behöva återkomma med flera frågor under arbetets gång, men försöker själv så gott jag kan först. Tack för all hjälp så här långt.
Hade för mig att man kunde sätta upload_max_filesize med ini_set(), men tyvärr mindes jag fel.
upload_max_filesize har PHP_INI_PERDIR mode vilket innebär att det bara kan sättas i php.ini, .htaccess eller httpd.conf
Hej Alla!
Nu ger jag upp bildskalandet med PHP. Stupade reda på första statementet, nåt fattas. Det blev bra ändå nu när jag kan läsa upp originalbilder. På Loopia servern behöver jag inte ändra något, där har de satt max_size så att det räcker till.
Jag låter webbläsaren jobba istället, så slipper jag. Lade till width="230" i raden som lägger ut bilden. Lite trögare att lägga ut en oskalad bild, men det kan jag leva med. Det kommer inte att hända ofta att slutanvändaren lägger ut egna bilder.