[PHP] Foto uploaden + thumb maken

Hey,

Heeft er iemand een goed voorbeeld van hoet dit zou moeten ?
Ik heb het zelf nog niet gemaakt en heb er ook niet echt veel tijd voor.

Dus alles hulp, voorbeelden, … zijn welkom.
De bedoeling is dus dat je een foto kan uploaden en dat er een thumbnail in de map “thumbs” komt en grote foto in de map “large”

Dank.

Automator?

Het uploaden zal je zelf moeten doen, maar de rest is te automatiseren.
Toch?

Het is de bedoeling dat het met php wordt gedaan. Niet iedereen heeft een mac of automator.

Daarin kan je toch ook taken bewaren en daarna automatiseren?

(Dit draadje is ondertussen al vervuild, bedankt Mc Erik)

Ik vraag dus hoe dit moet PHP moet!
Niet met automator!

Je bedoelt Photoshop? Ik ook.

Sorry hoor, ik probeerde te helpen.

hey konijn, ik heb thuis een heel goed script daarvoor, ik stuur het je straks door

Mc Erik, nee, hij bedoelt ook geen photoshop.

Hij bedoelt dus dat mensen via een php-pagina bestanden gaan uploaden naar een server en die dan ook nog eens een thumbnail genereert.

Ik heb geen kant en klaar voorbeeldje, maar je kan alvast eens zoeken naar de GD2 library voor php, dit zijn imagefuncties, waar je heel snel mee aan de slag kan. Als het goed is, zijn die zelfs geinstalleerd op je server (meestal standaard).

Oeps,

  1. Het draadje was dus niet zo erg vervuild.
  2. Ik had inmiddels op google gezien dat PHP iets heel anders was.
  3. Ik zal het nooit meer doen.

[quote:2af489374e="klaus"]Ik heb geen kant en klaar voorbeeldje, maar je kan alvast eens zoeken naar de GD2 library voor php, dit zijn imagefuncties, waar je heel snel mee aan de slag kan. Als het goed is, zijn die zelfs geinstalleerd op je server (meestal standaard).[/quote:2af489374e]

Kant en klare voorbeeldjes + uitgebreide uitleg zijn hier te vinden:
http://nl3.php.net/manual/en/function.imagecopyresized.php

Functies die je in elk geval nodig zult hebben zijn:
imagecreatefromjpeg
getimagesize
imagecopyresized

succes!

hmm, met php uploaden, er een thumb en een webklare image van maken en de info (2 links, datum en bijschrift) in een mysql stoppen.

Het is iets waar ik al lang naar zoek en aan werk maar nog nooit kreeg ik het klaar.
Als er iemand is die weet hoe dat te doen, of daar een tutorial wil van wil maken, let me know. Ik wil gerust die tutorial hosten.

[quote:4220c5188f="EL Mystica"]hmm, met php uploaden, er een thumb en een webklare image van maken en de info (2 links, datum en bijschrift) in een mysql stoppen. [/quote:4220c5188f]

probeer al die dingens te scheiden i.p.v. het als 1 ding te zien…

  • eerst een upload scriptje
  • daarachter het scriptje dat de afbeelding copiert met bijv. “move_uploaded_file”
  • dan de imagecreatetruecolo, imagecreatefromjpeg, ImageCopyResampled etc

desnoods deze herhalen voor verschillende grootes

als al die bestanden aangemaakt zijn die sql queries etc maken…

Er moeten geen gegevens in een database komen. Maar ik wacht het scriptje van tijs af.

bij sommige hosting paketten zit dit er standaard in, fotoalbum ofzo heet het dan. zal ook maar dit topic in de gaten houden, want een phpscipt dat dit voor mij doet is natuurlijk wel erg handig.

daan.

Misschien staat hier een bruikbaar script bij: http://www.hotscripts.com/PHP/Scripts_and_Programs/Image_Galleries/index.html

Of anders op 1 van de andere vele script-sites.
Toch is zelf maken heus makkelijker dan je denkt. :smiley:
Wellicht met behulp van deze site:
http://www.phpfreaks.com/tutorials.php

Ok, ik heb nu een upload script dat eens bestand 2x kopieert. Eens in de map large en in de map thumbs:

[code:1:5dea06b72f]<?
if(isset($_POST[‘upload’])){
if ($_FILES[‘foto’][‘type’] == “image/jpeg”){
copy ($_FILES[‘foto’][‘tmp_name’], “…/fotos/” . $map ."/large/" . $_FILES[‘foto’][‘name’]) or die (“Could not copy”);
// Ik moet worden verkleint.
copy ($_FILES[‘foto’][‘tmp_name’], “…/fotos/” . $map ."/thumbs/" . $_FILES[‘foto’][‘name’]) or die (“Could not copy”);

			echo &quot;Copy done. &lt;br&gt;&quot;; 
			echo &quot;Name&#58; &quot;.$_FILES&#91;'foto'&#93;&#91;'name'&#93;.&quot;&lt;br&gt;&quot;; 
			echo &quot;Size&#58; &quot;.$_FILES&#91;'foto'&#93;&#91;'size'&#93;.&quot;&lt;br&gt;&quot;; 
			echo &quot;Type&#58; &quot;.$_FILES&#91;'foto'&#93;&#91;'type'&#93;.&quot;&lt;br&gt;&quot;; 
 &#125;else &#123; 
			echo &quot;Could Not Copy, Wrong Filetype &#40;&quot;.$_FILES&#91;'foto'&#93;&#91;'name'&#93;.&quot;&#41;&lt;br&gt;&quot;; 
&#125; 

}
?>
[/code:1:5dea06b72f]

Nu zou alleen nog de ene jpg moeten worden geresized en dan in de map thumbs worden geplaatst.
Zou iemand mij daarmee kunnen helpen ?

In plaats van copy() gebruik je beter move_uploaded_file(): http://php.belnet.be/manual/en/function.move-uploaded-file.php

dit is een stuk van het resize script wat ik heb gemaakt en doorgaans gebruik

[code:1:c55c902518]

tempfile is je geupload bestand wat je wil gaan resizen

$tempfile = “…/fotos/”. $map . “/thumbs/” . $_FILES[‘foto’][‘name’];
$dimensions = getimagesize($tempfile);
list($orig_width, $orig_height) = getimagesize($tempfile);

creeer een thumbnail van 150 x 150 px;

$imagethumbsize = 150;

$img_thumbnail = imagecreatetruecolor($imagethumbsize , $imagethumbsize);

load source image

$src_file = imagecreatefromjpeg($tempfile);

met onderstaand stuk maak je een mooie vierkante uitsnede van je thumbnail maakt

if ($orig_width > $orig_height) {
$off_w = ($orig_width - $orig_height) / 2;
$off_h = 0;
$orig_width = $orig_height;
} elseif ($orig_height > $orig_width) {
$off_w = 0;
$off_h = ($orig_height - $orig_width)/2;
$orig_height = $orig_width;
} else {
$off_w = 0;
$off_h = 0;
}

Genereer thumbnail

imagecopyresampled($img_thumbnail, $src_file, 0, 0, $off_w, $off_h, $imagethumbsize, $imagethumbsize, $orig_width, $orig_height);

Output

imagejpeg($img_thumbnail, $dest_thumbnail, 70);

verwijder tempfile

unlink($tempfile);
[/code:1:c55c902518]

Het werkt niet :s Zou je anders eventueel jouw script kunnen integreren in wat ik al gepost heb ? Dit heb ik er van gemaakt:

[code:1:771eda42d4]<?
if(isset($_POST[‘upload’])){
if ($_FILES[‘myUploadedFile’][‘type’] == “image/jpeg”){
copy ($_FILES[‘myUploadedFile’][‘tmp_name’], “…/fotos/” . $map ."/large/" . $_FILES[‘myUploadedFile’][‘name’]) or die (“Could not copy”);

			// Resize script ...
			# tempfile is je geupload bestand wat je wil gaan resizen 
			  $tempfile = &quot;../fotos/&quot;. $map . &quot;/thumbs/&quot; . $_FILES&#91;'myUploadedFile'&#93;&#91;'name'&#93;; 
			  $dimensions = getimagesize&#40;$tempfile&#41;; 
			  list&#40;$orig_width, $orig_height&#41; = getimagesize&#40;$tempfile&#41;;      
			
			  # creeer een thumbnail van 150 x 150 px; 
			  $imagethumbsize = 150; 
			
			  $img_thumbnail = imagecreatetruecolor&#40;$imagethumbsize , $imagethumbsize&#41;; 
			  
			  # load source image 
			  $src_file = imagecreatefromjpeg&#40;$tempfile&#41;; 
									  
			  # met onderstaand stuk maak je een mooie vierkante uitsnede van je thumbnail maakt 
			  if &#40;$orig_width &gt; $orig_height&#41; &#123; 
				$off_w = &#40;$orig_width - $orig_height&#41; / 2; 
				$off_h = 0; 
				$orig_width = $orig_height; 
			  &#125; elseif &#40;$orig_height &gt; $orig_width&#41; &#123; 
				$off_w = 0; 
				$off_h = &#40;$orig_height - $orig_width&#41;/2; 
				$orig_height = $orig_width; 
			  &#125; else &#123; 
				$off_w = 0; 
				$off_h = 0; 
			  &#125; 
			
			  # Genereer thumbnail 
			  imagecopyresampled&#40;$img_thumbnail, $src_file, 0, 0, $off_w, $off_h, $imagethumbsize, $imagethumbsize, $orig_width, $orig_height&#41;; 
			
			  # Output 
			  imagejpeg&#40;$img_thumbnail, $dest_thumbnail, 70&#41;; 
					  
			  # verwijder tempfile 
			  unlink&#40;$tempfile&#41;; 
			  
			  
			  

			echo &quot;Copy done. &lt;br&gt;&quot;; 
			echo &quot;Name&#58; &quot;.$_FILES&#91;'myUploadedFile'&#93;&#91;'name'&#93;.&quot;&lt;br&gt;&quot;; 
			echo &quot;Size&#58; &quot;.$_FILES&#91;'myUploadedFile'&#93;&#91;'size'&#93;.&quot;&lt;br&gt;&quot;; 
			echo &quot;Type&#58; &quot;.$_FILES&#91;'myUploadedFile'&#93;&#91;'type'&#93;.&quot;&lt;br&gt;&quot;; 
 &#125;else &#123; 
			echo &quot;Could Not Copy, Wrong Filetype &#40;&quot;.$_FILES&#91;'myUploadedFile'&#93;&#91;'name'&#93;.&quot;&#41;&lt;br&gt;&quot;; 
&#125; 

}

?>
[/code:1:771eda42d4]

Doe ik het goed?

[quote:7e0971fb1a="UsurPia"][code:1:7e0971fb1a] # Output imagejpeg($img_thumbnail, $dest_thumbnail, 70); [/code:1:7e0971fb1a][/quote:7e0971fb1a]

In UsurPia’s code is $img_thumbnail het plaatje wat in het geheugen geladen is, $dest_thumbnail het pad waar de thumbnail moet komen te staan, en “70” de .jpg kwaliteit.

Jouw code, konijn, waar je het plaatje fysiek kopieert is dus ook niet nodig. Met de GD library kun je plaatjes aanmaken op de harddisk. In dit geval onder de naam $dest_thumbnail.

Bedankt UsurPia, ik was ook al aan het tikken, maar jij bent verder.

Bekijk anders ook dit voorbeeld, konijn:
http://nl3.php.net/manual/en/function.imagecopyresized.php

Daar sturen ze een plaatje naar de browser zonder het op schijf te saven (vandaar: header(‘Content-type: image/jpeg’), maar dat lukt met UsurPia’s code.

Zo zie je maar, dat je het ook nog eens op meerdere manieren kunt doen.