Bildhöhe und -breite zur TNG-Datenbank hinzufügen

Ich habe festgestellt, dass die Medien-Tabelle in der Datenbank von TNG die Werte für Bildhöhe (height) und Bildbreite (width) nicht enthält. Statt dessen sind dort nur Nullen eingetragen. Nach Rücksprache mit dem Entwickler Darrin Lythgoe habe ich erfahren, dass dies so beabsichtigt sei: Höhe und Breite eines Bildes könnten bei Bedarf ja von PHP direkt aus der Bilddatei ausgelesen werden.

Wozu denn dann überhaupt die beiden Spalten? Das war die offensichtliche, nächste Frage. Darrin erläuterte, das TNG auch Videodateien verwalten könne. Für diese werden die beiden Spalten benötigt, da die Bildabmessungen sich bei Videodateien nicht so einfach ermitteln lassen ohne die Datei jeweils abzuspielen.

Für ein optimales Layout unserer Startseite kann ich aber in dem Widget für das TNG-Zufallsbild nur Bilder im Querformat brauchen. Zur Lösung gibt es nun verschiedene Strategien

  1. Eigene Kategorie für Querformat-Bilder
  2. Mit der Zufallssuche so lange suchen, bis ein Querformat-Bild gefunden wurde
  3. Höhe/Breite der Bilder mit in DB aufnehmen

Die ersten beiden Optionen habe ich schnell verworfen. Für eigene Kategorie hätte ich alle Querformat-Bilder ein zweites Mal händisch anlegen müssen, da TNG mehrere Kategorien nicht unterstützt. Und das Verwerfen eines Suchergebnisses ist absolut ineffizient und schlechter Stil.

Also schrieb ich ein kleines Skript, das ich manuell über die Datenbank laufen lassen kann von Zeit zu Zeit. Es sucht nach allen Bildern,für die noch keiner der beiden Werte Höhe bzw. Breite in der Tabelle eingetragen ist. Findet es solche Einträge, so wird diese Information aus der Bilddatei gelesen und die Datenbank zurück geschrieben.

Das Skript:

Ich habe noch einige Ausgaben hinzugefügt, um das Skript etwas gesprächiger zu machen. Das ist aber Makulatur, da es ja bei Aufruf absolut unattended über die Datenbank drüber läuft. Auch wenn es hier problemlos funktioniert und die SQL-Aufrufe sehr überschaubar sind: vorher bitte ein Backup der SQL-Datenbank machen!

Die Pfade müssen geprüft und evtl. angepasst werden. Zusätzlich dazu kann im ersten Query-String (Zeile 26) noch eine Anpassung nötig sein, sofern weitere Medienkategorien eingerichtet worden sind.

<?php 
/**
* add_imagesize.php -- adds image width/height to the database
* (c) 2014, Marcus Zurhorst
**/
include_once("/var/www/html/subdomains/tng/begin.php");   
include_once("/var/www/html/subdomains/tng/genlib.php"); 
tng_db_connect($database_host,$database_name,$database_username,$database_password) or exit;
?>
<?php
$path_prefix = "/var/www/html/subdomains/tng/";
?>
<h1>ADD_IMAGESIZE.PHP</h1>
<p>This script checks the media table in the TNG database for images where image width and/or height are not maintained.<br>
When images are found, the script will update the database with the values derived from the image files.</p>
<?php   
$query = "SELECT mediaID, mediakey, width, height FROM `tng_media` WHERE (mediatypeID = \"photos\" OR mediatypeID = \"headstones\") AND (height = 0 OR width = 0)";
echo "<br><hr>Query String:<br>" . $query . "<br><br>";
$query_result = mysql_query($query) or die ($admtext['cannotexecutequery'] . "MySQL_Query Error: $query");
$number_of_rows = mysql_num_rows($query_result);
if( $number_of_rows >= 0 ) {
    $i = 1;
    while($row = mysql_fetch_assoc($query_result)) {
        
        $imageID = $row['mediaID'];
        $path_to_image = $path_prefix . $row['mediakey'];    
        if (file_exists($path_to_image)) {
            
            $image_info = getimagesize($path_to_image);  
            $image_width = $image_info[0]; 
            $image_height = $image_info[1];
            echo "<u>Image #" . $i . " :</u><br>";
            echo "mediaID:  " . $imageID . "<br>";
            echo "Path:     " . $path_to_image . "<br>";
            echo "Width:    " . $image_width . "px<br>"; 
            echo "Height:   " . $image_height . "px<br>";     
            $row_update = "UPDATE `tng_media` SET width=$image_width , height=$image_height WHERE mediaID = $imageID";
            echo "<u>SQL STATEMENT:</u> " . $row_update . "<br>";    
            $update_result = mysql_query($row_update) or die ($admtext['cannotexecutequery'] . "MySQL_Query Error: $query");    
            if ($update_result) {
                echo "ImageID $imageID:  database updated successfully.<br><br>";    
            }
        }
    
        $i++;
    }    //while 
    mysql_free_result( $query_result );
    exit; 
}  // if 
echo "<br><br>Image width/height maintained in all rows. Nothing to update.<br><strong>Bye.</strong>"; 
?>

Download:

[wpdm_file id=5]

Schreibe einen Kommentar

Ich akzeptiere