SANDOBA//CMS - Content-Management für den MittelstandSANDOBA//CMS - Content-Management für den Mittelstand

Übersichtlicher Administrationsbereich

Überzeugende Ergebnisse

Informationen zum CMS Contentpapst Pressemeldung zur Veröffentlichung von Contentpapst 2016.1

Hinweis zur Bestellung
Haben Sie Fragen zur Bestellung im Online-Shop? In den "Hilfen für die Bestellung" werden Ihre Fragen beantwortet. Auch der Support hilft Ihnen gerne weiter (Kontaktformular).


Test des CMS Contentpapst in der Internet World

Dynamische Bildgrößenänderungen für JPG/PNG

In Contentpapst oder CP::Shop hochgeladene Bilder werden in vielen Modulen meist automatisch auf eine standardmäßige Größe angepasst, welche dann durchgängig verwendet wird. Dies muss jedoch nicht sein. Für JPG- und PNG-Grafiken gibt es jetzt eine Lösung, die die Größe eines Bildes jederzeit flexibel anpassen kann.

Mit dieser Hilfe ist es möglich, von einem Bild in Originalgröße "on-the-fly" Thumbnails in beliebigen Formaten zu generieren, die nur im Cache zur schnelleren Auslieferung zwischengespeichert werden.

Im Hintergrund basiert das hier verwendete Script auf der Contentpapst API für Grafiken (siehe auch in der Anleitung "Entwickler-API > Grafik"). Dazu wird ein Bild nicht mehr direkt aufgerufen, sondern über eine URL als Parameter. Als zusätzliche Parameter können die neue Höhe und Breite des Bildes übergeben werden (mind. 1 Parameter sollte vergeben sein).

img.resize.php?path=[PFAD ZUM BILD]&width=[NEUE GRÖßE]&height=[NEUE BREITE]
img.resize.php?path=beach.jpg&width=400 // generiert neues Bild mit 400 Pixel Breite

Anhand der Parameter wird das neue Bild generiert und im Cache zwischengespeichert. Hier sehen Sie das gesamte verwendete Script. Dieses muss als "img.resize.php" im Hauptordner von Contentpapst gespeichert werden:

<?php
include_once("functions/cp.image.php");

if (strpos($_REQUEST["path"], "http") !== false) {
  $this_filetype = substr(strrchr($_REQUEST["path"], "."), 1);
  $this_name = "tmp-img-".substr(md5($_REQUEST["path"]), 10).".".$this_filetype;
  @copy($_REQUEST["path"], "".$this_name);
  $_REQUEST["path"] = "".$this_name;
}

if ($_REQUEST["path"] AND file_exists($_REQUEST["path"])) {

   $this_filetype = substr(strrchr($_REQUEST["path"], "."), 1);
 
  if ($this_filetype == "jpeg") {
    $this_filetype = "jpg";
  }

  if (!trim($this_filetype)) {
    $size = getimagesize($_REQUEST["path"]);
    $this_filetype = str_replace("image/", "", $size["mime"]);
  }

  if ($this_filetype != "gif" AND ($_REQUEST["height"] OR $_REQUEST["width"])) {

    $this_image = "resize-".substr(md5($_SERVER["REQUEST_URI"]), 0, 15).".".$this_filetype;
  
    if (!file_exists($this_image)) {
 
       $size = getimagesize($_REQUEST["path"]);

      if ($_REQUEST["flex"]) {

        $width_scale = $size["0"]/$_REQUEST["width"];
        $height_scale = $size["1"]/$_REQUEST["height"];
        $new_height = $size["1"]/$width_scale;

        if ($new_height < $_REQUEST["height"]) {
          $_REQUEST["width"] = $_REQUEST["width"];
          $_REQUEST["height"] = $size["1"]/$width_scale;
        } else {
          $_REQUEST["height"] = $_REQUEST["height"];
          $_REQUEST["width"] = $size["0"]/$height_scale;
        }

      } elseif (!$_REQUEST["height"]) {
        $_REQUEST["height"] = intval($size["1"]*$_REQUEST["width"]/$size["0"]);
      } elseif (!$_REQUEST["width"]) {
        $_REQUEST["width"] = intval($size["0"]*$_REQUEST["height"]/$size["1"]);
      }

      if (!file_exists($this_image)) {

         if ($this_image != "") {
          touch($this_image);
        }

        $image = new contentpapst_image();
        $image->open($_REQUEST["path"]);
        $image->resize($_REQUEST["width"], $_REQUEST["height"]);
        $image->save($this_image);
      }
   
    }

  } else {
 
    $this_image = $_REQUEST["path"];
  
  }

  if ($_REQUEST["show_path"] == "1") {

    echo $this_image;
    exit;

  } elseif ($this_filetype != "gif") {

    header("Content-type: ".$size["mime"]);
    echo implode("", file($this_image));
    exit;

  } else {

    echo file_get_contents($this_image);
    exit;

  }

}
?>

Da durch die Nutzung des Caches nur der erste Aufruf ein wenig länger dauert (ca. 1 Sekunde), empfiehlt es sich generell Bilder in größeren Auflösungen hochzuladen und diese über die neue URL zu verlinken. Zudem sind Qualitätsunterschiede bei der Verkleinerung im Vergleich zu herkömmlichen Grafikprogrammen praktisch nicht feststellbar und die Arbeit für die manuelle Konvertierung der Bilder entfällt.

Bitte geben Sie eine Bewertung ab: nicht lesenswert  -2 -1 0 +1 +2  lesenswert


Weitere Artikel in der Knowledge Base:

Hier finden Sie die eBusiness-/eCommerce-Spezialisten von sandoba.de:
https://www.sandoba.de/support/knowledge-base/cms/dynamische-bildgroessenaenderungen-fuer-jpg-png.html