Text in Bild einfügen - Schrift verpixelt

Html

Erfahrenes Mitglied
Hallo zusammen, habe mir ein Bilderuploadscript gebastelt. Das funktioniert auch ohne Einschränkungen doch wollte ich das ganze noch etwas modifizieren. Und zwar möchte ich gerne einen bestimmten Text auf jedes hochgeladene Bild einfügen.

Dazu habe ich folgenden Code erstellt und modifiziert:

PHP:
// JPG
if($size[2]==2) {
$altesBild_TN = imagecreatefromjpeg($tmpname);
$altesBild_GR = imagecreatefromjpeg($tmpname);
											
$black = imagecolorallocate ($altesBild_GR, 0, 0, 0);
$white = imagecolorallocate ($altesBild_GR, 255, 255, 255);
$sy=$Hoehe_GR-700;
imagettftext ($altesBild_GR, 10, 0, 0, $sy, $black, "c:/windows/fonts/verdanaf", 
              	"TEdst");
											
											
$TN = imagecreatetruecolor($Breite_TN,$Hoehe_TN);
 											imagecopyresampled($TN,$altesBild_TN,0,0,0,0,$Breite_TN,$Hoehe_TN,$breite,$hoehe);
 											imagejpeg($TN,"$pfad_TN",50);

$GR = imagecreatetruecolor($Breite_GR,$Hoehe_GR);
 											imagecopyresampled($GR,$altesBild_GR,0,0,0,0,$Breite_GR,$Hoehe_GR,$breite,$hoehe);
 											imagejpeg($GR,"$pfad_GR",80);
										
//imagedestroy($altesBild); 
}

Das Problem ist jedoch das die Schrift sehr unleserlich erzeugt wird. Wählt man eine noch kleine Schrifgöße lässt sich so gut wie gar nix mehr erkennen. Habe auch schon verschieden Fonts getetest - ohne Erfolg.

Meine Frage ist nun ob ich dabei irgendetwas falsch mache!?
 

Anhänge

  • 222ef12c736d43564b2fa19ae6f238ab.jpg
    222ef12c736d43564b2fa19ae6f238ab.jpg
    8,3 KB · Aufrufe: 30
  • 6090a3bbf9b5d477f30e7abf94005025.jpg
    6090a3bbf9b5d477f30e7abf94005025.jpg
    13,8 KB · Aufrufe: 31
Poste mal den ganzen Code als Anhang(wenn es mehrere Dateien sind,pack sie in ein Archiv)!Vielleicht kann ich dir dann sagen wo der Fehler Liegt!
 
Poste den Code mal direkt, vielleicht lässt sich dadurch besser der Fehler finden!


PHP:
<?php
include "db_config.php";
$upload_status = array();
$jahr = $_POST['jahr'];
$kategorie = $_POST['kategorie'];
$ordner = $kategorie . "_" . $jahr;
$pfad = '';
$id = $_POST['seite'];
$maxsize = 1048576; // Maximal erlaubte Dateigröße (in Bytes)
$extensions = array('jpg', 'png', 'gif', 'jpeg'); // erlaubte Dateiendungen
// übergeordneten Ordner erstellen
if (!file_exists($ordner) || !is_dir($ordner)) {
mkdir($ordner, 0700);
}
// Thumbnailordner erstellen
if (!file_exists($ordner . "/" . "TN") || !is_dir($ordner . "/" . "TN")) {
mkdir($ordner . "/" . "TN", 0700);
}
// Originalordner erstellen
if (!file_exists($ordner . "/" . "GR") || !is_dir($ordner . "/" . "GR")) {
mkdir($ordner . "/" . "GR", 0700);
}
// Bilder durchlaufen
for ($i = 0;$i < count($_FILES['imagefile']['name']);$i++) {
$zufallsname = md5(uniqid(microtime())); //neuen Dateinamen erzeugen
$file_extension = substr(strrchr($_FILES['imagefile']['name'][$i], '.'), 1); // Erweiterung der Datei ermitteln
if ($_FILES['imagefile']['error'][$i] != UPLOAD_ERR_NO_FILE) {
// Erlaubte Dateiendungen prüfen
if (in_array($file_extension, $extensions)) {
//Erlaubte Größe prüfen
if (filesize($_FILES['imagefile']['tmp_name'][$i]) < $maxsize) {
if ($_FILES['imagefile']['error'][$i] == UPLOAD_ERR_OK) {
$tmpname = $_FILES['imagefile']['tmp_name'][$i];
//$bildname = $_FILES['imagefile']['name'][$i];
$neuername = $zufallsname . "." . $file_extension;
$pfad_TN = $ordner . "/" . "TN" . "/" . $neuername;
$pfad_GR = $ordner . "/" . "GR" . "/" . $neuername;
// Bilddaten ermitteln
$size = getimagesize("$tmpname");
$breite = $size[0];
$hoehe = $size[1];
//Thumbnail skalieren
$Breite_TN = 120;
$Hoehe_TN = intval($hoehe*$Breite_TN/$breite);
//Original skalieren
$Breite_GR = 600;
$Hoehe_GR = intval($hoehe*$Breite_GR/$breite);
// GIF
if ($size[2] == 1) {
$altesBild = imagecreatefromgif("$tmpname");
$TN = imagecreatetruecolor($neueBreite, $neueHoehe);
imagecopyresampled($TN, $altesBild, 0, 0, 0, 0, $Breite_TN, $Hoehe_TN, $breite, $hoehe);
imagegif($TN, "$pfad_TN", 50);
$GR = imagecreatetruecolor($Breite_GR, $Hoehe_GR);
imagecopyresampled($GR, $altesBild, 0, 0, 0, 0, $Breite_GR, $Hoehe_GR, $breite, $hoehe);
imagegif($GR, "$pfad_GR", 80);
imagedestroy($altesBild);
}
// JPG
if ($size[2] == 2) {
$altesBild_TN = imagecreatefromjpeg($tmpname);
$altesBild_GR = imagecreatefromjpeg($tmpname);
$black = imagecolorallocate($altesBild_GR, 0, 0, 0);
$white = imagecolorallocate($altesBild_GR, 255, 255, 255);
$sy = $Hoehe_GR-700;
imagettftext($altesBild_GR, 3, 0, 0, $sy, $black, "c:/windows/fonts/verdanaf", "TEdst");
$TN = imagecreatetruecolor($Breite_TN, $Hoehe_TN);
imagecopyresampled($TN, $altesBild_TN, 0, 0, 0, 0, $Breite_TN, $Hoehe_TN, $breite, $hoehe);
imagejpeg($TN, "$pfad_TN", 50);
$GR = imagecreatetruecolor($Breite_GR, $Hoehe_GR);
imagecopyresampled($GR, $altesBild_GR, 0, 0, 0, 0, $Breite_GR, $Hoehe_GR, $breite, $hoehe);
imagejpeg($GR, "$pfad_GR", 80);
//imagedestroy($altesBild);

}
// PNG
if ($size[2] == 3) {
$altesBild = imagecreatefrompng("$tmpname");
$TN = imagecreatetruecolor($Breite_TN, $Hoehe_TN);
imagecopyresampled($TN, $altesBild, 0, 0, 0, 0, $Breite_TN, $Hoehe_TN, $breite, $hoehe);
imagepng($TN, "$pfad_TN", 50);
$GR = imagecreatetruecolor($Breite_GR, $Hoehe_GR);
imagecopyresampled($GR, $altesBild, 0, 0, 0, 0, $Breite_GR, $Hoehe_GR, $breite, $hoehe);
imagepng($GR, "$pfad_GR", 80);
imagedestroy($altesBild);
}
//Bildinformation in DB speichern
$sql = "INSERT INTO bilder SET
                                                bildname='" . $neuername . "', 
                                                ID_seite='" . $id . "',
                                                kategorie='" . $ordner . "' ";
$eintragen = mysql_query($sql);
$imgsize = ceil(filesize($_FILES['imagefile']['tmp_name'][$i]) /1024);
$upload_status[$i]['bildname'] = $_FILES['imagefile']['name'][$i];
$upload_status[$i]['hinweis'] = "Upload erfolgreich. Bildgröße beträgt " . $imgsize . " kB.";
$upload_status[$i]['neuername'] = $neuername;
if (!$eintragen) $upload_status[$i]['hinweis'].= "<br>Die Bildinformationen konnten nicht in der         
                                                                          DB gespeichert werden.";
} else {
$upload_status[$i]['bildname'] = $_FILES['imagefile']['name'][$i];
$error = '';
switch ($_FILES['imagefile']['error'][$i]) {
case UPLOAD_ERR_INI_SIZE:
$upload_status[$i]['hinweis'] = "Die hochgeladene Datei überschreitet das in                                                                                                                                                                           der php.ini gesetzte Maximum!";
break;
case UPLOAD_ERR_FORM_SIZE:
$upload_status[$i]['hinweis'] = "Die hochgeladenen Datei überschreitet die in                                                                                      MAX_FILE_SIZE gesetzte Größe!";
break;
case UPLOAD_ERR_PARTIAL:
$upload_status[$i]['hinweis'] = "Die hochgeladene Datei wurde nur teilweise                                                                                                             
                                                                                     übertragen!";
break;
case UPLOAD_ERR_NO_FILE:
$upload_status[$i]['hinweis'] = "Es wurde keine Datei hochgeladen!";
}
}
} else {
$upload_status[$i]['bildname'] = $_FILES['imagefile']['name'][$i];
$upload_status[$i]['hinweis'] = "Bild muss kleiner als " . $maxsize/1024 . " kB sein!";
}
} else {
$upload_status[$i]['bildname'] = $_FILES['imagefile']['name'][$i];
$upload_status[$i]['hinweis'] = "Die Datei muss vom Typ " . implode(', ', $extensions) . " sein!";
}
}
}
echo "<table align='center' width='80%' border='1' cellpadding='10' cellspacing='0'>
<tr>
<td colspan='3' align='center'><b>Statusreport</b></td>
</tr>
<tr>
<td align='center'><b>ausgewählte Datei</b></td>
<td align='center'><b>Status</b></td>
<td align='center'><b>hochgeladene Datei</b></td>
</tr>";
foreach($upload_status AS $key => $value) {
echo "<tr>";
echo "<td>" . $value['bildname'] . "</td>";
echo "<td>" . $value['hinweis'] . "</td>";
echo "<td>";
if (isset($value['neuername'])) echo $value['neuername'];
else echo "&nbsp;";
echo "</td>";
echo "</tr>";
}
echo "</table>";
echo "<br />";
echo "<br />";
?>
 
Habe versucht mal selber den Fehler irgendwie zu finden...

Dabei bin ich aber auf folgendes Phänomen gestoßen.
Die Schrift ist bei zwei nacheinander hochgeladenen Bildern unterschiedlich groß! Warum?

Ist das vielleicht ein Hinweis auf einen bestimmten Fehler?

Hier der Codeteil den ich zurzeit teste:

PHP:
// JPG
if($size[2]==2) 
{
$altesBild = imagecreatefromjpeg($tmpname);
											
											
$black = imagecolorallocate ($altesBild, 0, 0, 0);
imagettftext ($altesBild, 20, 0, 0, 15, $black, "c:/windows/fonts/verdanaf", 
              											"TEdst");
											
											
											
											
$TN = imagecreatetruecolor($Breite_TN,$Hoehe_TN);
imagecopyresampled($TN,$altesBild,0,0,0,0,$Breite_TN,$Hoehe_TN,$breite,$hoehe);	
imagejpeg($TN,"$pfad_TN",50);

$GR = imagecreatetruecolor($Breite_GR,$Hoehe_GR);
imagecopyresampled($GR,$altesBild,0,0,0,0,$Breite_GR,$Hoehe_GR,$breite,$hoehe);
imagejpeg($GR,"$pfad_GR",80);										
											
										}


Im Anhang die beiden Bider...
 

Anhänge

  • 5a46a5859c2d0574fd96ef5879a73667.jpg
    5a46a5859c2d0574fd96ef5879a73667.jpg
    12,5 KB · Aufrufe: 37
  • 103afdc92ac13476a52950f38282adef.jpg
    103afdc92ac13476a52950f38282adef.jpg
    19,9 KB · Aufrufe: 44
Also ich bin der ganzen Sache auf die Schliche gekommen... Ich verändere ja die Größe des Ausgangsbildes.

Die Schrift wende ich auch auf das Ausgangsbild an und daher wurde die Schrift bei dem einen Bild verpixelt, da es kleiner als die vorgegebene Größe war und somit verzehrt wurde!

Nun aber ein Problem bleibt weiterhin, habe ich zwei verschieden große Ausgangsbilder(die Göße liegt über der vorgegeben Größe) und verkleinere diese mit meinen Script so habe ich auch bei beiden Bildern eine andere Schriftgöße!

Lässt sich denn die imagettftext Funktion nur auf das Ausgangsbild anwenden oder auch auf das bereits verkleinerte Bild!?

Wäre echt für eure Hilfe dankbar, Gruß Olli

EDIT: Geht jetzt
 
Zuletzt bearbeitet:
Zurück