webForumDet fria alternativet

Kan man ändra bildstorlek med PHP?

17 svar · 3 222 visningar · startad av kluringen

kluringenMedlem sedan juli 2011156 inlägg
#1

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?

@ndersMedlem sedan juni 200032 969 inlägg
jmeMedlem sedan maj 20012 237 inlägg
walter groupiusMedlem sedan juli 2004144 inlägg
#4

Php GD eller något pluginprogram. Enklast med gd dock.

kluringenMedlem sedan juli 2011156 inlägg
#5

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.

@ndersMedlem sedan juni 200032 969 inlägg
#6

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

kluringenMedlem sedan juli 2011156 inlägg
#7

@nders skrev:

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.

@ndersMedlem sedan juni 200032 969 inlägg
#8

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?

kluringenMedlem sedan juli 2011156 inlägg
#9

3072 x 2304 px (alla)
2,3 upp till 3,8 Mb, vet inte varför det varierar, har använt samma kamera

@ndersMedlem sedan juni 200032 969 inlägg
#10

Om det beror på att filerna är för stora kanske du kan ändra i php.ini om du har tillgång till det?

http://www.radinks.com/upload/config.php

kluringenMedlem sedan juli 2011156 inlägg
#11
echo $_FILES["file"]["error"];

ger returkod 1. Hur vet jag vad det betyder? Så att jag angriper rätt orsak?

walter groupiusMedlem sedan juli 2004144 inlägg
kluringenMedlem sedan juli 2011156 inlägg
#13

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.

PeddaMedlem sedan juni 20006 032 inlägg
#14

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.

drewMedlem sedan mars 2007845 inlägg
#15

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.

kluringenMedlem sedan juli 2011156 inlägg
#16

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.

PeddaMedlem sedan juni 20006 032 inlägg
#17

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

kluringenMedlem sedan juli 2011156 inlägg
#18

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.

137 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)