---
title: "Tumnagel generator"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/163291-tumnagel-generator"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Tulork"
published: "2007-08-08T21:10:50.000Z"
updated: "2007-08-23T23:10:18.000Z"
replies: 21
views: 935
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/163291-tumnagel-generator"
---

# Tumnagel generator

_Sida 1 av 2._

## #1 — Tulork, 2007-08-08T21:10Z

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.

Hur löser jag detta bäst?

Permalänk: https://www.webforum.nu/p/163291

## #2 — Pedda, 2007-08-09T05:55Z

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
<?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']}'");
		}
	}
}
?>
```

Permalänk: https://www.webforum.nu/p/2012848

## #3 — Tulork, 2007-08-09T08:30Z

men då blir väl inte alla tumnaglar lika stora?

Permalänk: https://www.webforum.nu/p/2012875

## #4 — Pedda, 2007-08-09T08:36Z

> **Tulork skrev:**
>
> men då blir väl inte alla tumnaglar lika stora?

> **Tulork skrev:**
>
> 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?

Permalänk: https://www.webforum.nu/p/2012877

## #5 — Tulork, 2007-08-09T08:41Z

Om en bild var mindre än en viss bredd, höjd så fylls resterande yta ut en vit ram eller nått. Men det du skickade fungerar utmärkt. Tack ska du ha ;

Permalänk: https://www.webforum.nu/p/2012878

## #6 — Pedda, 2007-08-09T08:46Z

Konstigt.
Om bilden är mindre så ska den bara flyttas som den är. Funkar så för mig, alltså ingen vit ram här. Det är ju det den sista else gör.

Permalänk: https://www.webforum.nu/p/2012879

## #7 — Tulork, 2007-08-09T08:49Z

nä alltså, jag har inte testat scriptet än :) det var bara jag som tänkte högt.

Skulle även behöva spara originalbilden i en egen mapp föresten.

Permalänk: https://www.webforum.nu/p/2012881

## #8 — Pedda, 2007-08-09T09:03Z

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.

```php
move_uploaded_file($tempnamn,  'originalbilder/' . $bildnamn);
```

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.

Permalänk: https://www.webforum.nu/p/2012887

## #9 — Tulork, 2007-08-09T09:55Z

hmm, är lite osäker på hur formuläret ska se ut för själva uppladdningen

Permalänk: https://www.webforum.nu/p/2012907

## #10 — Pedda, 2007-08-09T09:59Z

```
<form action="filen.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>
```

 
Observera att du måste ha enctype="multipart/form-data"

Permalänk: https://www.webforum.nu/p/2012910

## #11 — Tulork, 2007-08-09T10:20Z

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.

Permalänk: https://www.webforum.nu/p/2012915

## #12 — Pedda, 2007-08-09T11:25Z

Nej, den ska spara en ny bild i mappen "originalbilder".
Finns mappen?

Komplett kod:

```php
<?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']}'");
		}
	}
}
?>
```

Permalänk: https://www.webforum.nu/p/2012930

## #13 — Tulork, 2007-08-09T11:31Z

Det löste sig, fick hjälp av en annan. :)

Permalänk: https://www.webforum.nu/p/2012934

## #14 — Pedda, 2007-08-09T11:45Z

Testade koden och den funkar här hos mig iaf. :)

Permalänk: https://www.webforum.nu/p/2012937

## #15 — colione, 2007-08-09T11:57Z

Kan du posta koden som löste det hela? :)

Permalänk: https://www.webforum.nu/p/2012942

## #16 — Tulork, 2007-08-11T10:53Z

Det kan jag väl :)

```php
<?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.

Permalänk: https://www.webforum.nu/p/2013530

## #17 — Pedda, 2007-08-12T10:14Z

> **Tulork skrev:**
>
> 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.

Permalänk: https://www.webforum.nu/p/2013711

## #18 — Tulork, 2007-08-18T15:18Z

Har gjort så här

```php
 if (($_FILES['file']['type'] != "image/gif") && ($_FILES['file']['type'] != "image/GIF") && ($_FILES['file']['type'] != "image/jpg") && ($_FILES['file']['type'] != "image/JPG") && ($_FILES['file']['type'] != "image/jpeg") && ($_FILES['file']['type'] != "image/JPEG") && ($_FILES['file']['type'] != "image/png") && ($_FILES['file']['type'] != "image/PNG") && ($_FILES['file']['type'] != "image/PJPEG") && ($_FILES['file']['type'] != "image/pjpeg")) {
            echo "Bilden måste vara av typen gif, jpg, jpeg eller png.<br />";
		  
            exit;
        }
```

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..

Permalänk: https://www.webforum.nu/p/2017960

## #19 — Tulork, 2007-08-19T19:07Z

Nått tips jag kan prova, några fel ni ser...? kanske är det vår utvecklingsserver som saknar nått i biblioteket vad gäller bildhantering..?

Permalänk: https://www.webforum.nu/p/2018308

## #20 — Tulork, 2007-08-22T14:14Z

.gif funkar, likaså .jpg.. det är .png den inte vill ha nått att göra med.. kan det bero på någon php inställning på servern, eller apache?

Permalänk: https://www.webforum.nu/p/2018961

---

Tråden på webben: https://www.webforum.nu/amne/php/163291-tumnagel-generator  
Nästa sida: https://www.webforum.nu/amne/php/163291-tumnagel-generator/page2.md
