---
title: "Skapa miniatyrer från bildmapp (dålig kvalité)"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/182359-skapa-miniatyrer-från-bildmapp-dålig-kvalité"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Guldstrand"
published: "2010-02-06T14:27:16.000Z"
updated: "2010-02-07T12:09:30.000Z"
replies: 4
views: 772
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/182359-skapa-miniatyrer-från-bildmapp-dålig-kvalité"
---

# Skapa miniatyrer från bildmapp (dålig kvalité)

## #1 — Guldstrand, 2010-02-06T14:27Z

Jag använder följande kod för att skapa två olika miniatyrer från en bildmapp på servern. Kvalitén på bilderna blir **usel**, trots att jag har sett till "90".

```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) 
       // Skulle även vilja exkludera "thumb_", men vet inte hur jag lägger till det.
	{ 

      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 );

      imagecopyresized( $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}", 90 ); 

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

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

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

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

   	$title = strtolower(str_replace($in,$out,"{$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("upload/","mini/",330); 
createThumbs("upload/","mellan/",690);
```

Jag vill INTE skapa miniatyrer av bilder som har ordet "normal\_" eller "thumb\_" i filnamnet.

```php
if (stristr($info['filename'], "normal_") === FALSE) 
// Skulle även vilja exkludera "thumb_", men vet inte hur jag lägger till det.
```

Är tacksam för all hjälp.  :birp

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

## #2 — tydal, 2010-02-06T15:10Z

Använd imagecopyresampled i stället för imagecopyresized. Det är nog där du får den dåliga bildkvaliteten, snarare än av jpegkompressionen. Jpegkompressionen kan du nog efter den manövern ställa ner till 75 och ändå få bättre kvalitet.

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

## #3 — Guldstrand, 2010-02-07T01:31Z

> **[tydal skrev:](https://www.webforum.nu/p/1497139)**
>
> Använd imagecopyresampled i stället för imagecopyresized. Det är nog där du får den dåliga bildkvaliteten, snarare än av jpegkompressionen. Jpegkompressionen kan du nog efter den manövern ställa ner till 75 och ändå få bättre kvalitet.

Aha.. ska testa med det.

Hur lägger jag till **två** "argument" till koden nedan, (normal\_ och thumb\_)?  :r

```php
if (stristr($info['filename'], "normal_") === FALSE)
```

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

## #4 — tydal, 2010-02-07T09:35Z

Om jag förstått dig rätt vill du alltså att if-uttrycket ska vara sant om filnamnet inte innehåller "normal\_" =och= filnamnet inte innehåller "thumb\_". Och skrivs &&

if (stristr($info\['filename'\], "normal\_") === FALSE && stristr($info\['filename'\], "thumb\_") === FALSE)

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

## #5 — Guldstrand, 2010-02-07T12:09Z

> **[tydal skrev:](https://www.webforum.nu/p/1497174)**
>
> Om jag förstått dig rätt vill du alltså att if-uttrycket ska vara sant om filnamnet inte innehåller "normal\_" =och= filnamnet inte innehåller "thumb\_". Och skrivs &&
> 
> if (stristr($info\['filename'\], "normal\_") === FALSE && stristr($info\['filename'\], "thumb\_") === FALSE)

**Korrekt!** \*tror jag\*
Har för mig att jag redan har testat detta, men ÄNDÅ skapas miniatyrer av bilder med "thumb\_" eller "normal\_" i filnamnet.

Jag vill alltså INTE skapa miniatyrer av bilder som har något av orden i filnamnet.

**EDIT:** Glöm det, det verkar fungera nu.  \*skumt\*

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

---

Tråden på webben: https://www.webforum.nu/amne/php/182359-skapa-miniatyrer-från-bildmapp-dålig-kvalité
