# Thumbnails alle neu berechnen?

**URL:** https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136
**Category:** Shopware 3.5
**Tags:** templates--design
**Created:** [10. Februar 2012 um 15:08 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136 "2012-02-10T15:08:11Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![florian](https://avatars.discourse-cdn.com/v4/letter/f/898d66/32.png) [@florian](https://forum.shopware.com/u/florian)
#### Post date: [10. Februar 2012 um 15:08 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/1 "2012-02-10T15:08:11Z")

</div>

Hallo liebe Gemeinde! Eine Frage zu Bildergrößen: In unserem Shop sind bereits alle Artikel eingepflegt und alle Bilder zu den Produkten sind auch hochgeladen. Die Bildergröße 3 mit 140x140 Pixel würde ich gerne größer zeigen in 163x163 Pixel. Wie kann ich Shopware dazu bewegen, dass alle bereits eingepflegten Bilder in dieser neuen Größe neu berechnet werden? Im Moment werden nur neue Bilder, die ich neu hochlade in 163x163 erzeugt. Wie bekomme ich die alten Bilder größer? Danke, Florian!

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [10. Februar 2012 um 15:12 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/2 "2012-02-10T15:12:10Z")

</div>

Es gibt irgendwo einen WIKI Artikel dazu. Anbei Code, welcher du in einer PHP Datei speichern muss und in das Shopware Root Verzeichnis kopierst. Oben gibst du die Thumbnail ID an und die neue Größe. Dann die Datei per URL aufrufen und warten 😉 [code]\<?php include (“config.php”);

mysql\_connect($DB\_HOST, $DB\_USER, $DB\_PASSWORD);

$db\_select = mysql\_select\_db($DB\_DATABASE);

$bild = new bildedit();

$uploaddir = ‘images/articles/’;

if (!is\_dir($uploaddir)){

```
die("$uploaddir it´s not a directory");

```

}

// Thumbnail - Number der zu aktualisierenden Größe und neue Größe x/y in px

$thb = 2;

$thb\_x = 240;

$thb\_y = 240;

$sql = “SELECT img FROM s\_articles\_img”;

$result = mysql\_query($sql);

echo “**”.mysql\_num\_rows($result)." zu aktualisierende Bilder “; while ($row = mysql\_fetch\_assoc($result)) { $filename = $row[“img”].”.jpg"; $uploadfile = $uploaddir . basename($filename); if (!file\_exists($uploaddir)){ die ("$uploadfile it´s not a file  
rn"); } $pictureSize = getimagesize($uploadfile); echo “Source: “.$uploadfile.” ({$pictureSize[“x”]} / {$pictureSize[“y”]}) “; if (!$thb\_y){ $bild-\>resize($uploadfile,$thb\_x,0,1,$uploaddir.$row[“img”].”\_$thb.jpg”); }else { $bild-\>resize\_dynamic($uploadfile,$thb\_x,$thb\_y,1,$uploaddir.$row[“img”]."\_$thb.jpg"); } echo “Target: “.$uploaddir.$row[“img”].”\_$thb.jpg”." ($thb\_x / $thb\_y) "; } class bildedit { function resize ($picture, $new\_width, $new\_height, $mode, $newfile) { $image=imagecreatefromjpeg($picture); //erstellt ein Abbild im Speicher $size=getimagesize($picture); //ermittelt die Größe des Bildes $breite=$size[0]; //die Breite des Bildes $hoehe=$size[1]; //die Höhe des Bildes // Verhältnis Breite zu Höhe bestimmen $verhaeltnis = $breite/$hoehe; if ($breite \< $new\_width){ $breite\_neu = $breite; }else { $breite\_neu = $new\_width; } $hoehe\_neu = round($breite\_neu / $verhaeltnis,0); $newImage=imagecreatetruecolor($breite\_neu,$hoehe\_neu); //Thumbnail im Speicher erstellen imagecopyresampled($newImage,$image,0,0,0,0,$breite\_neu,$hoehe\_neu,$breite,$hoehe); imagejpeg($newImage,$newfile,90); //Thumbnail speichern imagedestroy($image); imagedestroy($newImage); } function resize\_dynamic ($picture, $new\_width, $new\_height, $mode, $newfile) { $image=imagecreatefromjpeg($picture); //erstellt ein Abbild im Speicher $size=getimagesize($picture); //ermittelt die Größe des Bildes $breite=$size[0]; //die Breite des Bildes $hoehe=$size[1]; //die Höhe des Bildes // Verhältnis Breite zu Höhe bestimmen if ($breite \> $hoehe){ $verhaeltnis = $breite/$hoehe; $breite\_neu = $new\_width; $hoehe\_neu = round($breite\_neu / $verhaeltnis,0); }else { $verhaeltnis = $hoehe/$breite; $hoehe\_neu = $new\_height; $breite\_neu = round($hoehe\_neu / $verhaeltnis,0); } $newImage=imagecreatetruecolor($breite\_neu,$hoehe\_neu); //Thumbnail im Speicher erstellen imagecopyresampled($newImage,$image,0,0,0,0,$breite\_neu,$hoehe\_neu,$breite,$hoehe); imagejpeg($newImage,$newfile,90); //Thumbnail speichern imagedestroy($image); imagedestroy($newImage); } } ?\> [/code]**

---

<div class="post-metadata">

### Author: ![florian](https://avatars.discourse-cdn.com/v4/letter/f/898d66/32.png) [@florian](https://forum.shopware.com/u/florian)
#### Post date: [10. Februar 2012 um 15:15 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/3 "2012-02-10T15:15:07Z")

</div>

Wow, das ging ja sehr zügig! Danke schön, ich werde mein Glück versuchen.

---

<div class="post-metadata">

### Author: ![florian](https://avatars.discourse-cdn.com/v4/letter/f/898d66/32.png) [@florian](https://forum.shopware.com/u/florian)
#### Post date: [10. Februar 2012 um 18:09 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/4 "2012-02-10T18:09:19Z")

</div>

Das Script funktioniert, aber nur teilweise. Es müssen 1792 Bilder resized werden, aber das Script kommt nicht bis zum Ende der Bilder-Liste. Nur ein paar hundert werden resized. Wahrscheinlich darf das Script nicht so lange auf dem Server laufen. Was kann ich machen, damit alle Bilder resized werden?

---

<div class="post-metadata">

### Author: ![waldicom](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/waldicom/32/12881_2.png) [@waldicom](https://forum.shopware.com/u/waldicom)
#### Post date: [10. Februar 2012 um 18:33 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/5 "2012-02-10T18:33:05Z")

</div>

Man kann es mit dieser Funktion versuchen: [url=http://php.net/manual/en/function.set-time-limit.php]set\_time\_limit/url Einfach als erste Zeile im Script.

---

<div class="post-metadata">

### Author: ![florian](https://avatars.discourse-cdn.com/v4/letter/f/898d66/32.png) [@florian](https://forum.shopware.com/u/florian)
#### Post date: [10. Februar 2012 um 18:47 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/6 "2012-02-10T18:47:54Z")

</div>

Super! Als Wert musste ich aber noch die 0 einsetzen. Ich hab also nun dies im Script stehen: [code]

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [11. Februar 2012 um 09:23 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/7 "2012-02-11T09:23:26Z")

</div>

Man kann auch über das SQLStatement ein Limit arbeiten. Select bla from Tabelle Limit 0, 800 Und im zweiten Durchgang Limit 800, 1600 Etc. Natürlich nur wenn das mit dem Zeitlimit nicht hinhaut 😉

---

<div class="post-metadata">

### Author: ![potsdamtours](https://avatars.discourse-cdn.com/v4/letter/p/bcef8e/32.png) [@potsdamtours](https://forum.shopware.com/u/potsdamtours)
#### Post date: [16. Dezember 2012 um 10:45 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/8 "2012-12-16T10:45:30Z")

</div>

Hallo an alle, ich saß gerade ebenfalls vor diesem Problem und wollte nachträglich für mehrere Thumbnailgrößen die Bilder neu erstellen lassen. Unter Shopware 4.0 läuft der obige Code nicht mehr. Ich bin nicht der Top php-Programmierer, aber es funktioniert und es werden jetzt für mehrere Größeren nacheinander die Bilder neu erstellt. Verbesserungs/Optimierungsvorschläge sind gern willkommen! [code]\<?php //Skript läuft lange, also Limit aufheben  
set\_time\_limit(0);

$config = include (“config.php”);

```
if (!is_array($config)) {
  print 'Invalid configuration file provided; PHP file does not return array value';
  exit();
};

```

mysql\_connect($config[‘db’][‘host’], $config[‘db’][‘username’], $config[‘db’][‘password’]);  
$db\_select = mysql\_select\_db($config[‘db’][‘dbname’]);

$bild = new bildedit();  
$uploaddir = ‘media/image/’;  
if (!is\_dir($uploaddir)){  
die("$uploaddir it´s not a directory");  
}

// Thumbnail - neue Größen als key-value Paar x/y in px

$thb[‘30’] = ‘30’;  
$thb[‘57’] = ‘57’;  
$thb[‘105’] = ‘105’;  
$thb[‘140’] = ‘140’;  
$thb[‘285’] = ‘255’;  
$thb[‘720’] = ‘600’;

$sql = “SELECT img FROM s\_articles\_img”;  
$result = mysql\_query($sql);

echo “

**".mysql\_num\_rows($result)." zu aktualisierende Bilder**”; while ($row = mysql\_fetch\_assoc($result)) { $filename = $row[“img”].".jpg"; $uploadfile = $uploaddir . basename($filename); if (!file\_exists($uploaddir)){ die ("$uploadfile it´s not a file  
rn"); } $pictureSize = getimagesize($uploadfile); echo “Source: “.$uploadfile.” ({$pictureSize[“x”]} / {$pictureSize[“y”]})”; foreach($thb as $key =\> $value) { echo $key.’-’.$value.’  
'; if (!$value){ $bild-\>resize($uploadfile,$key,0,1,$uploaddir.“thumbnail/”.$row[“img”]."\_".$key.“x”.$value.".jpg"); }else { $bild-\>resize\_dynamic($uploadfile,$key,$value,1,$uploaddir.“thumbnail/”.$row[“img”]."\_".$key.“x”.$value.".jpg"); } echo "

Target: “.$uploaddir.$row[“img”].”\_".$key.“x”.$value."jpg

"; } } class bildedit { function resize ($picture, $new\_width, $new\_height, $mode, $newfile) { $image=imagecreatefromjpeg($picture); //erstellt ein Abbild im Speicher $size=getimagesize($picture); //ermittelt die Größe des Bildes $breite=$size[0]; //die Breite des Bildes $hoehe=$size[1]; //die Höhe des Bildes // Verhältnis Breite zu Höhe bestimmen $verhaeltnis = $breite/$hoehe; if ($breite \< $new\_width){ $breite\_neu = $breite; }else { $breite\_neu = $new\_width; } $hoehe\_neu = round($breite\_neu / $verhaeltnis,0); $newImage=imagecreatetruecolor($breite\_neu,$hoehe\_neu); //Thumbnail im Speicher erstellen imagecopyresampled($newImage,$image,0,0,0,0,$breite\_neu,$hoehe\_neu,$breite,$hoehe); imagejpeg($newImage,$newfile,90); //Thumbnail speichern imagedestroy($image); imagedestroy($newImage); } function resize\_dynamic ($picture, $new\_width, $new\_height, $mode, $newfile) { $image=imagecreatefromjpeg($picture); //erstellt ein Abbild im Speicher $size=getimagesize($picture); //ermittelt die Größe des Bildes $breite=$size[0]; //die Breite des Bildes $hoehe=$size[1]; //die Höhe des Bildes // Verhältnis Breite zu Höhe bestimmen if ($breite \> $hoehe){ $verhaeltnis = $breite/$hoehe; $breite\_neu = $new\_width; $hoehe\_neu = round($breite\_neu / $verhaeltnis,0); }else { $verhaeltnis = $hoehe/$breite; $hoehe\_neu = $new\_height; $breite\_neu = round($hoehe\_neu / $verhaeltnis,0); } $newImage=imagecreatetruecolor($breite\_neu,$hoehe\_neu); //Thumbnail im Speicher erstellen imagecopyresampled($newImage,$image,0,0,0,0,$breite\_neu,$hoehe\_neu,$breite,$hoehe); imagejpeg($newImage,$newfile,90); //Thumbnail speichern imagedestroy($image); imagedestroy($newImage); } } ?\> [/code]

---

<div class="post-metadata">

### Author: ![MHS](https://avatars.discourse-cdn.com/v4/letter/m/ccd318/32.png) [@MHS](https://forum.shopware.com/u/MHS)
#### Post date: [17. März 2014 um 08:20 UTC](https://forum.shopware.com/t/thumbnails-alle-neu-berechnen/6136/9 "2014-03-17T08:20:10Z")

</div>

Erstmal vielen Dank für das Script!! Ich habe drei Fragen dazu: 1. Erstellt dieses Script für alle Bilder neue Größen oder nur für eine Bestimmte Kategrorie, oder allgemein für alle Produktbilder? 2. Muss ich alle vorhandenen Größen nochmal eintragen im Script oder reicht es, nur die neue Größe zu definieren? 3. Muss ich im Backend vorher die neue Größe schon bei den Arikelbildern anlegen? Danke und Grüße, Marc
