---
title: "Problem med att skapa miniatyrer från mapp"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/182373-problem-med-att-skapa-miniatyrer-från-mapp"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Guldstrand"
published: "2010-02-08T18:59:30.000Z"
updated: "2010-02-10T10:56:27.000Z"
replies: 8
views: 722
page: 1
pages: 1
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/182373-problem-med-att-skapa-miniatyrer-från-mapp"
---

# Problem med att skapa miniatyrer från mapp

## #1 — Guldstrand, 2010-02-08T18:59Z

Jag använder följande kod för att skapa två olika miniatyrer (från en mapp på servern), samt för att flytta originalbilden, men något blir "knas" med vissa bilder.

```php
function createThumbs( $pathToImages, $pathToThumbs, $thumbWidth )
{
  $dir = opendir( $pathToImages );

  while (false !== ($fname = readdir( $dir ))) {
    $info = pathinfo($pathToImages . $fname);

    if ( strtolower($info['extension']) == 'jpg')
    {

	if (stristr($info['filename'], "normal_") === FALSE && stristr($info['filename'], "thumb_") === FALSE)
	{ 

      echo "Skapar miniatyr för <b>{$fname}</b><br />";

      $img = imagecreatefromjpeg( "{$pathToImages}{$fname}" );
      $width = imagesx( $img );
      $height = imagesy( $img );

      $new_width = $thumbWidth;
      $new_height = floor( $height * ( $thumbWidth / $width ) );

      $tmp_img = imagecreatetruecolor( $new_width, $new_height );

      imagecopyresampled( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height ); 

	$randFilename = uniqid("img_"); 
	$newFilename = $randFilename.".".$info['extension'];

      	imagejpeg( $tmp_img, "{$pathToThumbs}{$newFilename}", 60 ); 

	copy("{$pathToImages}{$fname}", "{$newFilename}"); 

	list($width, $height) = getimagesize("{$pathToImages}{$fname}"); 
	$storlek = filesize("{$pathToImages}{$fname}"); 

	$medlem = 1;
	$kategori = 5;
	$kommentar = sqlesc($_POST["kommentar"]); 

	$in = array("-", "_", "xxx", "cover", ".jpg", "xxx", "dvd");
	$out = array(" ", " ", "", "", "", "", "");  

   	$title = str_replace($in,$out,"" .strtolower("{$fname}"). "");

	mysql_query("INSERT INTO bilder (datum, anvandare, kategori, filnamn, titel, kommentar, bredd, hojd, storlek) 
		      VALUES(NOW(), $medlem, $kategori, '$newFilename', '$title', $kommentar, $width, $height, $storlek)") 
			or sqlerr(__FILE__, __LINE__);

    }
  } 
}
  closedir( $dir );
}
createThumbs("/uploads/","mini/",330); 
createThumbs("/uploads/","mellan/",690);
```

Det som händer, är att flera av de minsta bilderna (bredd 330), inte skapas alls.
Vad kan vara fel?  :q

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

## #2 — Guldstrand, 2010-02-09T12:27Z

\*bump\*  (eller nått...)
 :r

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

## #3 — The_Hulk, 2010-02-09T12:44Z

Är det alltid samma bilder som inte skapas?
Om du kan hitta en bild som den inte skapa den lilla (330px) men den större (690px) så lägg den i en egen katalog och lägg sedan till lite med debug-kod i skriptet. 
aktivera mer felmeddelande (error, warning m.m.) för skriptet.

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

## #4 — Guldstrand, 2010-02-09T12:49Z

> **[The_Hulk skrev:](https://www.webforum.nu/p/1497316)**
>
> Är det alltid samma bilder som inte skapas?
> Om du kan hitta en bild som den inte skapa den lilla (330px) men den större (690px) så lägg den i en egen katalog och lägg sedan till lite med debug-kod i skriptet. 
> aktivera mer felmeddelande (error, warning m.m.) för skriptet.

Är osäker på om det är samma bilder som inte skapas varje gång.
**Alla** "mellanliggande" bilder verkar skapas utan problem, det är endast en del mindre bilder som inte skapas.

Är lite svårt att kontrollera vilka mindre bilder som inte skapas, då filnamnet ändras med unikt ID.  :r

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

## #5 — The_Hulk, 2010-02-09T13:29Z

Du kan kolla om filen finns efter att du har skapat den med funktionen file_exists <http://se2.php.net/manual/en/function.file-exists.php>
Lägg den i en if-stats och skriv ut något fint felmeddelande så kanske det kan hjälp att hitta vilka bilder som inte skapas. Skriv ut både det nya namnet och originalnamnet.

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

## #6 — Guldstrand, 2010-02-09T19:06Z

Hmm... jag misstänker att det är det unika filnamnet som spökar.
Kan det vara så att mini -och mellanbilden får varsitt unikt id (olika), när jag hör "createThumbs" funktionen två gånger?
Om det är så, hur löser jag det?

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

## #7 — The_Hulk, 2010-02-10T07:36Z

Då får du nog tänka om lite.
Gör en funktion som loopar över alla bilder och sedan en funktion som skapar själva miniatyrer. Då kan du skapa det unika/slumpmässiga namnet utanför funktionen som skapar miniatyren.
Förväntar du dig att båda bilder ska få samma namn nu?

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

## #8 — Guldstrand, 2010-02-10T10:01Z

> **[The_Hulk skrev:](https://www.webforum.nu/p/1497386)**
>
> Förväntar du dig att båda bilder ska få samma namn nu?

**Korrekt!**  :r :l
Hur löser jag detta enklast med funktionen ovan?

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

## #9 — The_Hulk, 2010-02-10T10:56Z

Jag har tyvärr inte kunnat testa koden så jag vet inte om allting har blivit rätt.

```php
<?php
function createThumbs($pathToImages)
{
	$dir = opendir( $pathToImages );

	while (false !== ($fname = readdir( $dir )))
	{
		$info = pathinfo($pathToImages . $fname);

		if ( strtolower($info['extension']) == 'jpg')
		{
			if (stristr($info['filename'], "normal_") === FALSE && stristr($info['filename'], "thumb_") === FALSE)
			{ 
				$randFilename = uniqid("img_"); 
				$newFilename = $randFilename . "." . $info['extension'];
				echo "Skapar miniatyr för <b>{$fname}</b> miniatyrnamn <b>$newFilename</b><br />";

				createThumb($pathToImages . $fname, "mini/" . $newFilename, 330);
				createThumb($pathToImages . $fname, "mellan/" . $newFilename, 690);
			}
		} 
	}
	
	closedir( $dir );
}

function createThumb($imageName, $thumbName, $thumbWidth )
{
	$img = imagecreatefromjpeg($imageName);
	$width = imagesx($img);
	$height = imagesy($img);

	$new_width = $thumbWidth;
	$new_height = floor( $height * ( $thumbWidth / $width ) );
	$tmp_img = imagecreatetruecolor( $new_width, $new_height );

	imagecopyresampled( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height ); 
	imagejpeg( $tmp_img, $thumbName, 60 ); 
	copy("{$pathToImages}{$fname}", "{$newFilename}"); 

	list($width, $height) = getimagesize("{$pathToImages}{$fname}"); 
	$storlek = filesize("{$pathToImages}{$fname}"); 
	$medlem = 1;
	$kategori = 5;
	$kommentar = sqlesc($_POST["kommentar"]); 

	$in = array("-", "_", "xxx", "cover", ".jpg", "xxx", "dvd");
	$out = array(" ", " ", "", "", "", "", "");  
	$title = str_replace($in,$out,"" .strtolower("{$fname}"). "");

	mysql_query("INSERT INTO bilder (datum, anvandare, kategori, filnamn, titel, kommentar, bredd, hojd, storlek) 
		VALUES(NOW(), $medlem, $kategori, '$newFilename', '$title', $kommentar, $width, $height, $storlek)") 
		or sqlerr(__FILE__, __LINE__);
}

createThumbs("/uploads/");
?>
```

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

---

Tråden på webben: https://www.webforum.nu/amne/php/182373-problem-med-att-skapa-miniatyrer-från-mapp
