Original-Bild in diverse Grössen Resizen

Freut mich, dass ich helfen konnte - Die Chefs sind hier aber definitiv andere, und es gibt zum Glück noch einige, die viel mehr als ich Ahnung von diesen Sachen haben (und dafür schätze ich diese auch so sehr, denn so lerne ich garantiert nie aus) ;)
 
Ein Frage hätte ich noch...
Wäre es möglich mein Logo (wie in meinem Benutzerbild hier, aber nur das runde Logo) mit transparenz/durchsichtig über die Bilder einzufügen?
Es ist nur ne Frage... :)
Natürlich würde ich den www Schriftzug weglassen ausser bei meinen eigenen Bilder, da würde ich diesen Manuell einfügen.

So nun muss ich mich aber aufs Hor legen... Bis bald und nochmals DANKE!
 
Zuletzt bearbeitet:
Dafür ist die Methode embedImage in meiner Klasse gedacht. Vor der Ausgabe müsste einfach noch
PHP:
$image->embedImage($watermarkpath, $position, $border_padding);
aufgerufen werden.
$watermarkpath soll dabei der Pfad zu der einzubettenden Grafik sein (möglichst absolute Angabe um Fehler zu vermeiden), $position ist die Position auf dem Originalbild (1 links unten bis 9 rechts oben [siehe NumBlock der Tastatur]), und $border_padding ist entweder ein Integerwert, der den Abstand des Wasserzeichens vom Bildinnenrand aus angibt (gilt dann für oben, rechts, unten & links) oder ein Array aus ein (oben && unten && links && rechts), zwei (oben && unten, rechts && links), drei (oben, rechts && links, unten) oder vier Werten (oben, rechts, unten, links).

Ein möglicher Aufruf wäre zB

PHP:
// hier resize

$image->embedImage('/srv/www/vhosts/thuet.de/httpdocs/watermark.png', 3, 8);
$image->render('jpg');

Vorausgesetzt, das Wasserzeichen befindet sich unter dem angegebenen Pfad. Der Rest wird dann automatisch abgewickelt, wenn der Pfad auf eine erreichbare und lesbare Bilddatei in einem unterstützten Format zeigt.
 
Erstmals danke...
Ich dachte mir dass das Gehen würde. Im Nachhinein werde ich es aber nicht machen, da es ja nicht meine Bilder (Urheberrechte) sind! Darum lasse ich dabei sein und werde einfach bei meine Bilder die Logo einfüge aktion Manuell durchführen.
 
Mir ist allerdings noch ne Frage eingefallen oder besser gesagt aufgefallen...
Wenn die Bilder im Widescreen-Format (1920x1200 Pixel oder 1280x800) resizet/produziert werden vom PHP-Code ist es nicht Optimal!
Könnte man[n] da das Original in diesem Format auch im Ordner "wallpapers" belassen mit der Bildbezeichung 0300000001-wide.jpg oder so, damit der Script dann nur für diese Wide Formatierung dieses Basis-Bild nimmt?
Ist nur ne Idee zur Perfektionisierung. Ich weiss nicht ob das Möglich ist... :confused:
Daraus wären dann folgende drei Formate möglich: 1920x1200, 1680x1050, 1280x800.
Somit wären dann zwei Hauptbilder vorhanden pro Wallpaper...
Ein Bild für die 4:3 Ratio und ein Bild für die 16:9 Ratio.
 
Die wallpaperview.php einfach mit diesem Code ersetzen:
PHP:
<?php 
ini_set('error_reporting', 'on');
error_reporting(E_ALL);

define('THIS_DIR', realpath(dirname(__FILE__)) . '/');

if (empty($_GET['wallpaper']) OR !ctype_digit($_GET['wallpaper'])) { 
    die('Ungültige Bilddatei!'); 
} 

// Format ermitteln
$size = (!empty($_GET['size'])) ? $_GET['size'] : null; 

// wide format --> nein
$wide = false;

switch ($size) { 
    case 'thumbnail': 
        $x = 150;
        $y = 96;
        break; 

    default: 
    case 'preview': 
        $x = 500;
        $y = 375;
        break; 

    case '800':
    case '800x600':
        $x = 800;
        $y = 600;
        break; 

    case '1024': 
    case '1024x768': 
        $x = 1024;
        $y = 768;
        break; 

    case '1280_2': 
    case '1280x800':
        // wide format --> ja
        $wide = true; 
        $x    = 1280;
        $y    = 800;
        break; 

    case '1280_1': 
    case '1280x960': 
        $x = 1280; 
        $y = 960;
        break; 

    case '1280': 
    case '1280x1024': 
        $x = 1280;
        $y = 1024;
        break; 

    case '1600': 
    case '1600x1200': 
        $x = 1600;
        $y = 1200;
        break;

    case '1680':
    case '1680x1050':
        // wide format --> ja
        $wide = true;
        $x    = 1680;
        $y    = 1050;
        break;

    case '1920': 
    case '1920x1200':
        // wide format --> ja
        $wide = true;
        $x    = 1920;
        $y    = 1200;
        break; 
}

// Pfad zur Bilddatei konstruieren
if ($wide == true) {
    $path = realpath(dirname(__FILE__) . "/wallpapers/{$_GET['wallpaper']}-wide.jpg");

    if (!is_readable($path)) {
        $path = realpath(dirname(__FILE__) . "/wallpapers/{$_GET['wallpaper']}.jpg");
    }
} else {
    $path = realpath(dirname(__FILE__) . "/wallpapers/{$_GET['wallpaper']}.jpg");
}

// und prüfen
if (!is_readable($path)) {
    die('Quelldatei nicht gefunden!');
}

// Klassen einbinden
require_once(THIS_DIR . 'library/class.image.php');
require_once(THIS_DIR . 'library/class.validate.php');

// Objekt instanzieren
$image = new Image($path);
// resize
$image->resizeCanvas($x, $y, 'fit'); 
// Renderqualität
$image->setRenderQuality(90); 
// ausgeben
$image->render('jpg');

Vorausgesetzt, die "dateiname-wide.jpg" existiert, wird diese für die breiten Formate genutzt (Weitere Auflösungen können in der Switch einfach hinzugefügt werden), ansonsten wird doch auf die normale Datei zurückgegriffen. Wenn diese aber auch nicht existiert, wird das Script nun vorzeitig beendet, ohne den Arbeitsspeicher unnötig zu belasten.
 
Danke vielmals... Es Funktionniert bestens mit dem Widescreen-Format (!)
Wahrscheinlich meine letzten Fragen zu diesem Beitrag... :)
Ich möchte nun auch die Vorschau-Bilder (thumbnail) sowie die Vorschau-Bilder (preview) direkt aus dem PHP-Script einbinden in der Homepage?

Ist es richtig so für die grosse Vorschau:
HTML:
<img border="2" src="/wallpaperview.php?wallpaper=0300000001&size=preview">

und für das Thumbnail:
HTML:
<img border="2" src="/wallpaperview.php?wallpaper=0300000001&size=thumbnail">

Zusätzlich möchte ich die Grössen anpassen der Vorschau und der Thumbnail, kann ich dazu nur die "wallpaperview.php" ändern oder muss ich die neuen Pixel angaben sonst noch wo anpassen?

Auszug aus der wallpaperview.php:
PHP:
switch ($size) { 
    case 'thumbnail': 
        $x = 94;
        $y = 70;
        break; 

    default: 
    case 'preview': 
        $x = 624;
        $y = 468;
        break;
 
Da die Klassen nur die Funktionalität bereitstellen, wäre es unsinnig, dort etwas zu ändern - Du liegst also vollkommen richtig, wenn du die funktionsnutzende Datei, die wallpaperview.php modifizierst.
Und da hast du auch schon erkannt, was du wie machen musst ;)

Und ja, der Zugriff über ein HTML-Dokument ist auch richtig, so wie du es angegeben hast.
 
Hallo maeTimmae...
ich hätte da noch eine Frage...
Ich möchte ein zusätzliche Format anbieten (1920x1440 [Ratio 4:3]) kann ich den einfach nur in der wallpaperview.php einfügen wie folgendes Beispiel oder muss ich sonst noch eine der Dateien im Ordner "library" anpassen?
PHP:
case '1920_1': 
case '1920x1440': 
        $x = 1920;
        $y = 1440;
        break;
Das ist bereits alles...
PS: Es läuft alles Bestens und ich habe zusätzlich das "memory_limit "auf 64MB erhöht.
 
Zurück