Schlagwort-Archive: Programmieren

Dieser Bereich beinhaltet alle Themen zu dem Schlagwort “Programmieren”.

Vorschaubilder

PHP Skript zum Erstellen von Vorschaubildern

Dieses Skript dient zum Erstellen von Vorschaubildern auf einem Webserver.
Das Skript benötigt Ausführ- und Schreibrechte.
Zusätzlich muss auf dem Webserver die GD-Bibliothek installiert sein.

<?php
// Bildtyp mit korrektem Image Loader und Saver verknüpfen
// - erleichtert das spätere Hinzufügen weiterer Typen
// - erleichtert das Lesen der Funktion
const IMAGE_HANDLERS = [
    IMAGETYPE_JPEG => [
        'load' => 'imagecreatefromjpeg',
        'save' => 'imagejpeg',
        'quality' => 100
    ],
    IMAGETYPE_PNG => [
        'load' => 'imagecreatefrompng',
        'save' => 'imagepng',
        'quality' => 0
    ],
    IMAGETYPE_GIF => [
        'load' => 'imagecreatefromgif',
        'save' => 'imagegif'
    ]
];

/**
* @param $ src - ein gültiger Dateispeicherort
* @param $ dest - ein gültiges Dateiziel
* @param $ targetWidth - gewünschte Ausgabebreite
* @param $ targetHeight - gewünschte Ausgabehöhe oder null
*/
function createThumbnail($src, $dest, $targetWidth, $targetHeight = null) {

    // 1. Lade das Bild aus dem angegebenen $ src
    // - Überprüfe, ob die Datei tatsächlich vorhanden ist
    // - Überprüfe, ob es sich um einen gültigen Bildtyp handelt
    // - Lade die Bildressource

    // erhalte den Typ des Bildes
    // Wir brauchen den Typ, um den richtigen Loader zu bestimmen
    $type = exif_imagetype($src);

    // wenn kein gültiger Typ oder kein Handler gefunden wurde -> exit
    if (!$type || !IMAGE_HANDLERS[$type]) {
        return null;
    }

    // lade das Bild mit dem richtigen Loader
    $image = call_user_func(IMAGE_HANDLERS[$type]['load'], $src);

    // kein Bild am angegebenen Ort gefunden -> beenden
    if (!$image) {
        return null;
    }

    // 2. Erstelle eine Miniaturansicht und ändern Sie die Größe des geladenen $ image
    // - Bildabmessungen abrufen
    // - Definiere die Ausgabegröße entsprechend
    // - Erstelle ein Miniaturbild basierend auf dieser Größe
    // - Alpha-Transparenz für GIFs und PNGs festlegen
    // - zeichne das letzte Miniaturbild

    // Originalbildbreite und -höhe abrufen
    $width = imagesx($image);
    $height = imagesy($image);

    // Seitenverhältnis beibehalten, wenn keine Höhe eingestellt ist
    if ($targetHeight == null) {

        // Verhältnis von Breite zu Höhe ermitteln
        $ratio = $width / $height;

        // wenn ist Hochformat
        // Verhältnis zur Skalierungshöhe verwenden, um in das Quadrat zu passen
        if ($width > $height) {
            $targetHeight = floor($targetWidth / $ratio);
        }
        // wenn ist Querformat
        // Verhältnis zur Skalierungsbreite verwenden, um in das Quadrat zu passen
        else {
            $targetHeight = $targetWidth;
            $targetWidth = floor($targetWidth * $ratio);
        }
    }

    // Erstelle eine Kopie basierend auf der berechneten Zielgröße
    $thumbnail = imagecreatetruecolor($targetWidth, $targetHeight);

    // Transparenzoptionen für GIFs und PNGs festlegen
    if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_PNG) {

        // Bild transparent machen
        imagecolortransparent(
            $thumbnail,
            imagecolorallocate($thumbnail, 0, 0, 0)
        );

        // zusätzliche Einstellungen für PNGs
        if ($type == IMAGETYPE_PNG) {
            imagealphablending($thumbnail, false);
            imagesavealpha($thumbnail, true);
        }
    }

    // Kopiere das gesamte Quellbild, um das Bild zu duplizieren und die Größe zu ändern
    imagecopyresampled(
        $thumbnail,
        $image,
        0, 0, 0, 0,
        $targetWidth, $targetHeight,
        $width, $height
    );

    // 3. Speiche das $ thumbnail auf der Festplatte
    // - rufe die richtige Speichermethode auf
    // - Stelle die richtige Qualitätsstufe ein
    // speichere die doppelte Version des Bildes auf der Festplatte
    return call_user_func(
        IMAGE_HANDLERS[$type]['save'],
        $thumbnail,
        $dest,
        IMAGE_HANDLERS[$type]['quality']
    );
}
?>

Das Skript kann nun mit:

<?php
createThumbnail($original, $thumb, 160);
?>

Aufgerufen werden, um von $original ein $thumb zu erstellen. Die Angabe 160 ist die Größe in Pixel, die das Vorschaubild bekommt. Andere Werte sind zulässig.

Es sind Angaben mit und ohne Pfadangabe gültig.
Das Skript benötigt Ausführ- und Schreibrechte.

Newsticker

PHP Skript zum Erstellen eines Newstickers

Da ich selbst auf der Suche nach einem solchen Newsticker war und noch nichts adäquates gefunden habe, habe ich kurzerhand ein Skript erstellt, welches dies erledigt.
Vorraussetzung hierfür: Webserver mit PHP
Im Fehlerfall: Es kann sein, dass das JavaScript durch den lokalen Aufruf geblockt wird.

Das Skript benötigt auf dem Server Ausführ- und Schreibrechte, damit die RDF-Datei heruntergeladen und verarbeitet werden kann. Dies geschieht bei jedem Aufruf und dauert weniger als 1 Sekunde 🙂

Die Seite kann bequem über ein <iframe>-Tag eingebunden werden.

Newsticker Skript

Beispiel für die Anzeige des Newstickers
Beispiel für die Anzeige des Newstickers

Die Adresse der Datei der News-Datei kann in Zeile 3 geändert werden.

Die Farben kannst Du per CSS anpassen:

  • Zeile 73: Hintergrundfarbe
  • Zeile 74: Textgröße
  • Zeile 82: Textfarbe

Die Anzahl der News, die aus der Datei gelesen werden sollen, können in Zeile 40 angepasst werden.

<?php
 //URL der Datei, die geladen/geparsed werden soll
 $newsfile = "http://www.tagesschau.de/newsticker.rdf";
  
 // Funktion, um News rdf Datei abzuholen
 function get_file($file, $local_path, $newfilename) 
 { 
     $err_msg = ''; 
     //echo "<br>Attempting message download for $file<br>"; 
     $out = fopen($local_path.$newfilename,"wb");
     if ($out == FALSE){ 
       print "File not opened<br>"; 
       exit; 
     } 
  
     $ch = curl_init(); 
  
     curl_setopt($ch, CURLOPT_FILE, $out); 
     curl_setopt($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_URL, $file); 
  
     curl_exec($ch); 
     //echo "<br>Error is : ".curl_error ( $ch); 
  
     curl_close($ch); 
  
 }
 //Funktionsaufruf um die Datei abzuholen
 get_file($newsfile,'./','newsticker.rdf');
  
 // Feed einlesen
 if( !$xml = simplexml_load_file('newsticker.rdf') ) {
     die('Fehler beim Einlesen der XML Datei!');
 }
  
 // Ausgabe Array
 $out = array();
  
 // auszulesende Datensaetze
 $i = 7;
  
 // Items vorhanden?
 if( !isset($xml->channel[0]->item) ) {
 	die('Keine Items vorhanden!');
 }
  
 // Items holen
 foreach($xml->channel[0]->item as $item) {
 	if( $i-- == 0 ) {
 		break;
 	}
 	$out[]=(string) $item->title;
 }
 //print_r($out);
  
 // Eintraege ausgeben
 $news = "";
 foreach ($out as $value) {
 	$news .= " ++++ ".$value;
 }
 ?>
 <!DOCTYPE html>
 <html lang="de">
 <head>
 <meta charset="utf-8">
 <title>SKB Web - NewsParser</title>
 <style>
 	.marquee {
 		max-width: 100vw; /* iOS braucht das */
 		white-space: nowrap;
 		overflow: hidden;
 		/* Hintergrundfarbe des Lauftextes. Auskommentieren, um Transparent zu erhalten */
 		background-color: #000000;
 		font-size:20px;
 	}
  
 	.marquee span {
 		display: inline-block;
 		padding-left: 100%;
 		animation: marquee 10s linear infinite;
 		/* Textfarbe des Lauftextes */
 		color: #FFFFFF;
 	}
  
 	/* Optional: mouseover (oder Tipp auf dem Touchscreen) pausiert die Laufschrift */
 	.marquee span:hover {
 		animation-play-state: paused 
 	}
  
 	/* Make it move */
 	@keyframes marquee {
 		0%   { transform: translateX(0); }
 		100% { transform: translateX(-100%); }
 	}
 </style>
 </head>
 <body>
 <div id="marquee" class="marquee"><span><?php echo $news; ?></span></div>
 <script>
 	if (document.getElementById("marquee")) {
 		var laufschrift = document.getElementById("marquee");
 		len = laufschrift.innerHTML.length;
 		laufschrift.firstChild.style.animationDuration = len/6 +"s";
 	}
 </script>
 </body>
 </html>