Har suttit och kollat igenom rätt många olika inlägg här på WF angående tumnagel skript, men jag har inte lyckats hitta någonting som passar, och har väldigt svårt att bygga ut dem till vad jag behöver av någon anledning.
Vad jag är ute efter är att när man väljer att ladda upp en bild ska bilden i originalformat sparas i en mapp med ett framgenererat filnamn. Filnamnet ska sedan in i databasen. Samtidigt som detta ska en tumnagel genereras av bilden som sedan ska sparas i en annan mapp och med ett unikt filnamn som även det ska in i databasen.
Den genererade tumnagelbilden får inte ha dimensionsproblem (vet inte om det går att ordna)... vad jag menar med dimensionsproblem är att en bild som original är 1024x768 ska bebålla dess dimensionsförhållanden vid förminskningen.
Postar ett exempel som jag har använt mig av.
Den genererar inte slumpade filnamn, men det får du fixa.
Om bredden på bilden är över 200px (variabeln $nybredd) så skalas bilden om.
Så en originalbild på 400*200 så blir tumnageln alltså 200*100
eller en originalbild på 400*800 blir 200*400
<?php
//###################################
$mapp = "../produktbilder"; // Mappen där logon ska sparas
$nybredd = 200; // Bredd som bilden ska ha i pixlar
$kompression = 100; // Vilken komprimering (100=ingen)
//###################################
// ladda upp ny bild
if (!empty($_FILES['file']['name'])) {
if (is_uploaded_file($_FILES['file']['tmp_name'])) {
$bildnamn = $_FILES['file']['name'];
$tempnamn = $_FILES['file']['tmp_name'];
$filandelse = strtolower(substr($bildnamn, (strrpos($bildnamn, '.'))));
$bildstrl = getimagesize($tempnamn);
// Ta bort mellanslag
$bildnamn = str_replace(' ', '_', $bildnamn);
// Ta bort å
$bildnamn = str_replace('å', 'a', $bildnamn);
// Ta bort ä
$bildnamn = str_replace('ä', 'a', $bildnamn);
// Ta bort ö
$bildnamn = str_replace('ö', 'o', $bildnamn);
// Kolla filen så det är en bild
if (($_FILES['file']['type'] != "image/gif") && ($_FILES['file']['type'] != "image/jpeg") && ($_FILES['file']['type'] != "image/png") && ($_FILES['file']['type'] != "image/pjpeg")) {
echo "Bilden måste vara av typen gif, jpg, jpeg eller png!";
exit;
}
// Ändra storleken om bilden är större än $nybredd
if ($nybredd < $bildstrl[0]) {
$nyhojd = ceil(($nybredd / $bildstrl[0]) * $bildstrl[1]);
// Gör om bildens storlek
$nybild = imagecreatetruecolor($nybredd, $nyhojd);
// Kontrollera vilken bildtyp det är (1=gif , 2=jpg , 3=png)
switch($bildstrl[2]) {
case 1:
$bild = imagecreatefromgif($tempnamn);
break;
case 2:
$bild = imagecreatefromjpeg($tempnamn);
break;
case 3:
$bild = imagecreatefrompng($tempnamn);
break;
}
imagecopyresampled($nybild, $bild, 0, 0, 0, 0, $nybredd, $nyhojd, $bildstrl[0], $bildstrl[1]);
// Kopiera bilden till sin mapp
$sparabild = $mapp . '/' . $bildnamn;
imagejpeg($nybild, $sparabild, $kompression);
// Frigör minne som associerats med bilderna
imagedestroy($bild);
imagedestroy($nybild);
// In i databasen
mysql_query("UPDATE produkter SET bild='$bildnamn' WHERE p_id = '{$_POST['id']}'");
} else {
move_uploaded_file($tempnamn, $mapp . '/' . $bildnamn);
// In i databasen
mysql_query("UPDATE produkter SET bild='$bildnamn' WHERE p_id = '{$_POST['id']}'");
}
}
}
?>
Den genererade tumnagelbilden får inte ha dimensionsproblem (vet inte om det går att ordna)... vad jag menar med dimensionsproblem är att en bild som original är 1024x768 ska bebålla dess dimensionsförhållanden vid förminskningen.
Du ville ju att dom skulle behålla dimensionsförhållandena.
Med mitt exempel så blir alla bilder 200px breda medans höjden justeras efter förhållandena.
Hur vill du annars ha det?
Ok, trodde att du hade testat och fick en vit ram.
Originalbilden är det ju bara att flytta till rätt mapp.
Lägg till move_uploaded_file() med sökvägen till rätt mapp bara inne i både if-satsen och i else-satsen.
red/
om bilden har en bredd på under 200px (alltså det värde du anger på $nybredd) så ändras inte storleken i scriptet, utan den flyttas bara till mappen med tumnaglar som den är.
Hänger inte riktigt med på det du skrev om att flytta originalbilden. Med originalbild menar jag de dimensionerna som bilden hade innan jag laddade upp den.
om jag flyttar med den kodbiten du gav mig flyttar jag bara tumnagelbilden igen.
Nej, den ska spara en ny bild i mappen "originalbilder".
Finns mappen?
Komplett kod:
<?php
//###################################
$mapp = "thumbs"; // Mappen där tumnageln ska sparas
$original = "originalbilder"; // Mappen där originalbilden sparas
$nybredd = 200; // Bredd som bilden ska ha i pixlar
$kompression = 100; // Vilken komprimering (100=ingen)
//###################################
// ladda upp ny bild
if (!empty($_FILES['file']['name'])) {
if (is_uploaded_file($_FILES['file']['tmp_name'])) {
$bildnamn = $_FILES['file']['name'];
$tempnamn = $_FILES['file']['tmp_name'];
$filandelse = strtolower(substr($bildnamn, (strrpos($bildnamn, '.'))));
$bildstrl = getimagesize($tempnamn);
// Ta bort mellanslag
$bildnamn = str_replace(' ', '_', $bildnamn);
// Ta bort å
$bildnamn = str_replace('å', 'a', $bildnamn);
// Ta bort ä
$bildnamn = str_replace('ä', 'a', $bildnamn);
// Ta bort ö
$bildnamn = str_replace('ö', 'o', $bildnamn);
// Kolla filen så det är en bild
if (($_FILES['file']['type'] != "image/gif") && ($_FILES['file']['type'] != "image/jpeg") && ($_FILES['file']['type'] != "image/png") && ($_FILES['file']['type'] != "image/pjpeg")) {
echo "Bilden måste vara av typen gif, jpg, jpeg eller png!";
exit;
}
// Ändra storleken om bilden är större än $nybredd
if ($nybredd < $bildstrl[0]) {
$nyhojd = ceil(($nybredd / $bildstrl[0]) * $bildstrl[1]);
// Gör om bildens storlek
$nybild = imagecreatetruecolor($nybredd, $nyhojd);
// Kontrollera vilken bildtyp det är (1=gif , 2=jpg , 3=png)
switch($bildstrl[2]) {
case 1:
$bild = imagecreatefromgif($tempnamn);
break;
case 2:
$bild = imagecreatefromjpeg($tempnamn);
break;
case 3:
$bild = imagecreatefrompng($tempnamn);
break;
}
imagecopyresampled($nybild, $bild, 0, 0, 0, 0, $nybredd, $nyhojd, $bildstrl[0], $bildstrl[1]);
// Kopiera bilden till sin mapp
$sparabild = $mapp . '/' . $bildnamn;
// Skapa tumnageln
imagejpeg($nybild, $sparabild, $kompression);
// Frigör minne som associerats med bilderna
imagedestroy($bild);
imagedestroy($nybild);
// Flytta originalbilden
move_uploaded_file($tempnamn, $original .'/' . $bildnamn);
// In i databasen
mysql_query("UPDATE produkter SET bild='$bildnamn' WHERE p_id = '{$_POST['id']}'");
} else {
// Flytta originalbilden
move_uploaded_file($tempnamn, $original .'/' . $bildnamn);
// Flytta den även till mappen med tumnaglar
move_uploaded_file($tempnamn, $mapp . '/' . $bildnamn);
// In i databasen
mysql_query("UPDATE produkter SET bild='$bildnamn' WHERE p_id = '{$_POST['id']}'");
}
}
}
?>
<?php
include("setts/conn.php");
//###################################
$thumb = "pic/thumb"; // Mappen där thumbnails ska sparas
$original = "pic/original"; // Mappen där originalbilden ska sparas
$nybredd = 100; // Bredd som bilden ska ha i pixlar
$kompression = 100; // Vilken komprimering (100=ingen)
//###################################
?>
<form action="test.php" method="post" enctype="multipart/form-data" name="upload" id="upload">
<input name="file" type="file" size="30" />
<input type="submit" name="nyBild" value="Ladda upp" />
</form>
<?php
// ladda upp ny bild
if (!empty($_FILES['file']['name'])) {
if (is_uploaded_file($_FILES['file']['tmp_name'])) {
$bildnamn = $_FILES['file']['name'];
$tempnamn = $_FILES['file']['tmp_name'];
$filandelse = strtolower(substr($bildnamn, (strrpos($bildnamn, '.'))));
$bildstrl = getimagesize($tempnamn);
//slumpar fram ett filnamn
include ("setts/filnamns_generator.php");
$bildnamn = $u;
// Kolla filen så det är en bild
if (($_FILES['file']['type'] != "image/gif") && ($_FILES['file']['type'] != "image/jpeg") && ($_FILES['file']['type'] != "image/png") && ($_FILES['file']['type'] != "image/pjpeg")) {
echo "Bilden måste vara av typen gif, jpg, jpeg eller png.<br />
Filändelser med stora bokstäver accepteras inte";
exit;
}
// Ändra storleken om bilden är större än $nybredd
if ($nybredd < $bildstrl[0]) {
$nyhojd = ceil(($nybredd / $bildstrl[0]) * $bildstrl[1]);
// Gör om bildens storlek
$nybild = imagecreatetruecolor($nybredd, $nyhojd);
// Kontrollera vilken bildtyp det är (1=gif , 2=jpg , 3=png)
switch($bildstrl[2]) {
case 1:
$bild = imagecreatefromgif($tempnamn);
break;
case 2:
$bild = imagecreatefromjpeg($tempnamn);
break;
case 3:
$bild = imagecreatefrompng($tempnamn);
break;
}
imagecopyresampled($nybild, $bild, 0, 0, 0, 0, $nybredd, $nyhojd, $bildstrl[0], $bildstrl[1]);
// Kopiera bilden till sin mapp
$bild_namn = "$bildnamn$filandelse";
$sparabild = $thumb . '/' . $bild_namn;
imagejpeg($nybild, $sparabild, $kompression);
//Flyttar orginalbilden till rätt mapp
$bild_namn = "$bildnamn$filandelse";
move_uploaded_file($tempnamn, $original . '/' . $bild_namn);
$doit = "INSERT INTO annons (thumb, original) VALUES ('$bildnamn$filandelse', '$bildnamn$filandelse')";
$now = mysql_query($doit) or die ('Ett fel har uppstått');
// Frigör minne som associerats med bilderna
imagedestroy($bild);
imagedestroy($nybild);
} else {
move_uploaded_file($tempnamn, $thumb . '/' . $bild_namn);
copy ($thumb . '/' . $bild_namn, $original . '/' . $bild_namn);
$doit = "INSERT INTO annons (thumb, original) VALUES ('$bildnamn$filandelse', '$bildnamn$filandelse')";
$now = mysql_query($doit) or die ('Ett fel har uppstått');
}
}
}
?>
Ett problem som återstår dock... Den gnäller på bilder som använder sig av stora filändelser... jpg, png, gif funkar...... JPG, PNG, GIF fungerar inte.
Ett problem som återstår dock... Den gnäller på bilder som använder sig av stora filändelser... jpg, png, gif funkar...... JPG, PNG, GIF fungerar inte.
Trodde att dom hade samma mimi-type.
Testa att lägga till att den ska skriva ut vilken mime-type det är. Ladda upp en fil som inte godkänns och kolla.
Du kan ju lägga till fler mime-typer i kontrollen som ska godkännas.
Den klagar på allt utom jpg verkar det som.. jag har testat skriva ut $_FILES['file']['type'], men den säger inget.. har även provat dem separat.. det ända jag fått fram är att den skriver ut Array..