wie mach ich wasserzeichen auf jpg bilder via php?

ciberjoerg

Erfahrenes Mitglied
ich prüte gerade um an einem problem herum wozu ich keine ahnung habe dies zu lösen.

ich such schon im internet nach der funktion um wasserzeichen auf jpg bilder zu speichern und das wenn ich das bild bereits hochlade ins netz. zudem suche ich noch nach einem script welches mir ermöglicht bilder also nur jpg hochzuladen ohne das andere daten erlaubt sind.

derzeit nutze ich ein script welches so aussieht:
HTML:
<?php
    
    @include_once('functions.php'); 
    // Beispiel $path = '/bilder-upload-script/img/'; 
    $path = '/pics/'.$u->nic.'/';     // Verzeichnis zum Speicher Ordner nach http://www.ihre-domain.de/
    // Beispiel $img_path_up = '/home/www/web3/html/php-space/bilder-upload-script/img/';
    $img_path_up = $u->nic.'/'; // Absuluter Pfad zum Speicher Ordner
    $groessemax = 200; // Maximal Datei Größe in KB (KiloByte) 
    // ----------------------------------------- 
    // Ab hier nichts mehr anpassen 
    if (!isset($_GET["loechen"]))    $_GET["loechen"] = "";
    if (!isset($_GET["file"]))        $_GET["file"] = "";
    
?>
<?=$u->nic?>
<? 
if(uploadmoeglichkeitpruefen()==false){
    echo '<div style="color:red;">Es ist auf diesen Server kein Upload möglich, bitte wenden Sie sich an Ihren Hoster und bitten um Aktivierung der Php Upload Funktion.</div>';
     exit;    
}
if(file_exists($img_path_up)==false OR $img_path_up ==''){
    echo '<div style="color:red;">Es gibt kein Ordner wohin die Bilder geladen werden sollen! </div>';
    exit;

}
?>

    <br>
    <strong>File Upload</strong><br>
    <br>
<?

if($_POST["action"]){ 
    $filename = ""; 
    if ($HTTP_POST_FILES['userfile']['tmp_name']<> 'none'){    
        $file = $HTTP_POST_FILES['userfile']['name']; 
        $temp = $HTTP_POST_FILES['userfile']['tmp_name']; 
        $path_parts = pathinfo($file); 
        $filename = "1." . $path_parts["extension"]; 
        if($HTTP_POST_FILES['userfile']['size'] <= $groessemax*1024){
            if($path_parts["extension"] == "jpg"){
            if(decoct(fileperms($img_path_up))==40755){
                if(@copy($temp, $img_path_up.$filename)){ 
                    echo '<div style="color:green;">Datei ist auf den Server!<br>'; 
                    echo 'Url der Datei: <br><img src="http://'.$_SERVER['HTTP_HOST'].$path.'1.jpg"  width="100"><br><a href="'.$_SERVER['PHP_SELF'].'">Bild Ersetzen...</a><br></div>'; 
                } else {
                    echo '<div style="color:red;">Die Datei konnte nicht auf den Server geladen werden. <a href="'.$_SERVER['PHP_SELF'].'">Noch mal versuchen...</a><br><br></div>';
                }
            } else {
                echo '<div style="color:red;">Der Upload Ordner hat keine Schreibrechte! <a href="'.$_SERVER['PHP_SELF'].'">Noch mal versuchen...</a><br><br></div>';
            }
        } else {
            echo '<div style="color:red;">Die Datei ist zu groß! Die Datei darf nicht größer als '.$groessemax.' KB (KiloByte) sein, oder Hat die Falsche Dateiendung. <a href="'.$_SERVER['PHP_SELF'].'">Noch mal versuchen...</a><br><br></div>';
        }
    } 
}
} else { 
?> 
<form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER["../../nexus3/PHP_SELF"]; ?>">
    die Datei darf nicht gr&ouml;&szlig;er sein als <?php if((maximaledateiuploadgroesseermitteln()/1024)>$groessemax) echo $groessemax; else echo (maximaledateiuploadgroesseermitteln()/1024);?> KB (KiloByte).<br><br>
    <input name="userfile" type="file" size="40"><br><br>
    <input type="submit" name="action" value="Speichern">
</form> 
<? } ?>
<br><strong>File List</strong><br><br> 
<?
// Datein Löschen
if($_GET["loechen"]==1 AND $_GET["file"]!=''){
    if(file_exists($_GET["file"])==true){
        if(@unlink($_GET["file"])==true) echo '<div style="color:green;">Die Datei wurde erfolgreich gelöscht!<br><br></div>';
        else echo '<div style="color:red;">Die Datei konnte nicht gelöscht werden.<br><br></div>';
    } else {
        echo '<div style="color:red;">Die Datei gibt es nicht im Upload Verzeichnis!<br><br></div>';
    }
}
?>
 
Ich weiß jetzt nicht, was genau du machen möchtest, aber ich habe dir mal provisorische Funktion geschrieben...
PHP:
<?php
function _wasserzeichen($bilder_verzeichnis, $wasserzeichen_pfad){
  $bilder_verzeichnis = trim($bilder_verzeichnis);
  $wasserzeichen_pfad = trim($wasserzeichen_pfad);

  if(substr($bilder_verzeichnis, -1) == '/'){
    $bilder_verzeichnis = substr($bilder_verzeichnis, 0, -1);
  }
  
  if(false === ($verzeichnis = opendir($bilder_verzeichnis))){
    echo("Konnte Verzeichnis " . htmlspecialchars($bilder_verzeichnis) . " nicht &ouml;ffnen.<br />");
    return false;
  }
  
  if(mime_content_type($wasserzeichen_pfad) != 'image/jpg' &&
     mime_content_type($wasserzeichen_pfad) != 'image/jpeg'){
    echo("Das Wasserzeichen hat das falsche Format.<br />");
    return false; 
  }
  
  if(false === ($wasserzeichen = imagecreatefromjpeg($wasserzeichen_pfad))){
    echo("Konnte das Wasserzeichen nicht laden.<br />");
    return false;
  }
    
  while(false !== ($datei_name = readdir($verzeichnis))){
    if($datei_name != '.' && $datei_name != '..' && !is_dir($bilder_verzeichnis . '/' . $datei_name)){
      if(mime_content_type($bilder_verzeichnis . '/' . $datei_name) == 'image/jpg' ||
         mime_content_type($bilder_verzeichnis . '/' . $datei_name) == 'image/jpeg'){
        if(false !== ($bild = imagecreatefromjpeg($bilder_verzeichnis . '/' . $datei_name))){
          if(!is_dir($bilder_verzeichnis . '/backup/')){
            mkdir($bilder_verzeichnis . '/backup/');
          }
          
          if(!is_file($bilder_verzeichnis . '/backup/' . $datei_name)){
            $backup = fopen($bilder_verzeichnis . '/backup/' . $datei_name, 'w+');
            fwrite($backup, file_get_contents($bilder_verzeichnis . '/' . $datei_name));
            fclose($backup);
            unlink($bilder_verzeichnis . '/' . $datei_name);
            imagecopy($bild, $wasserzeichen, 0, 0, 0, 0, imagesx($wasserzeichen), imagesy($wasserzeichen));
            imagejpeg($bild, $bilder_verzeichnis . '/' . $datei_name);
            imagedestroy($bild);
            echo("Die Datei " . htmlspecialchars($datei_name) . " wurde mit einem Wasserzeichen best&uuml;ckt.<br />");
          }else{
            echo("Von der Datei " . htmlspecialchars($datei_name) . " war bereits ein Backup vorhanden. Das Skript &uuml;berspringt nun einfach diese Datei.<br />");
          }
        }else{
          echo("Konnte die " . htmlspecialchars($datei_name) . " nicht &ouml;ffnen.<br />");
        }
      }else{
        echo("Die Datei " . htmlspecialchars($datei_name) . " ist nicht vom Format JPG.<br />");
      }
    }
  }
  
  imagedestroy($wasserzeichen);
  closedir($verzeichnis);
}

_wasserzeichen('./ordner_in_dem_sich_die_bilder_befinden', './das_wasserzeichen.jpg');
?>
1. Parameter: Ordner, in dem sich die Bilder befinden.
2. Parameter: Pfad zum Wasserzeichen.
Informationen: Die originalen Bilder werden gesichert (in "backup", im Ordner, in dem sich auch die Bilder befinden).
Die Bilder, von denen bereits eine Sicherung gibt, werden nicht noch einmal überschrieben.
Falls du etwas anderes wolltest, schreib es einfach...

//Edit: Den Pfad zum Wasserzeichen vom Skript aus, nicht vom Ordner in dem sich die Bilder befinden, angeben.
 
Zuletzt bearbeitet:
Zurück