E-Mail als Bild

msycho

Erfahrenes Mitglied
Hallo!

Ich möchte einen String nach E-Mailadressen durchsuchen und bei Treffern die E-Mailadresse als Bild darstellen lassen.
Das Problem ist, dass momentan immer nur die E-Mailadresse ausgegeben wird, aber nicht der ganze Text mit der E-Mail-Grafik.

PHP:
function makeEmailPic($email)
{
  $textnr = 4;
  $textbreite = imagefontwidth($textnr) * strlen($email);
  $texthoehe  = imagefontheight($textnr);
  
  header ("Content-type: image/png");
  $bild = imagecreate($textbreite , $texthoehe);
  
  $hintergund_farbe  = imagecolorallocate($bild, 255, 255, 255);
  $text_farbe        = imagecolorallocate($bild, 0, 0, 0);
  
  imagestring($bild, $textnr, 0, 0, $email, $text_farbe);
  return imagepng($bild);
}

if(!function_exists('searchEmail')) 
{
  function searchEmail($text)
  {
    $email_pattern = "/^\w[\w|\.|\-]+@\w[\w|\.|\-]+\.[a-zA-Z]{2,4}$/";    
    $words = explode(' ', $text);    
    $str = "";
    
    foreach($words as $word)
    {
      if(preg_match($email_pattern, $word))
      {
        $word = makeEmailPic($word);  
      }      
      $str .= $word;
    }
    
    return $str; 
  }
}

$text = "ich bin ein text. das ist die email: email@web.de und ich heisse horschd.";

echo searchEmail($text);

Hat wer eine Idee was falsch ist?
 
Hi,

ich bekomme die Grafik ausgeliefert, allerdings auch nur die Grafik. Das liegt daran, dass Du da den Content-Type Header setzt und dann per imagepng die Grafik direkt an den Browser lieferst. Probiers mal so:

PHP:
function makeEmailPic($email)
{
  $textnr = 4;
  $textbreite = imagefontwidth($textnr) * strlen($email);
  $texthoehe  = imagefontheight($textnr);
  
//  header ("Content-type: image/png");
  $bild = imagecreate($textbreite , $texthoehe);
  
  $hintergund_farbe  = imagecolorallocate($bild, 255, 255, 255);
  $text_farbe        = imagecolorallocate($bild, 0, 0, 0);
  
  imagestring($bild, $textnr, 0, 0, $email, $text_farbe);
  $pfad = "pfad/in/den/du/speichern/kannst/";
  imagepng($bild, $pfad . "grafik.png");
  return '<img src="' . $pfad . 'grafik.png">';
}

if(!function_exists('searchEmail')) 
{
  function searchEmail($text)
  {
    $email_pattern = "/^\w[\w|\.|\-]+@\w[\w|\.|\-]+\.[a-zA-Z]{2,4}$/";    
    $words = explode(' ', $text);    
    $str = "";
    
    foreach($words as $word)
    {
      if(preg_match($email_pattern, $word))
      {
        $word = makeEmailPic($word);  
      }      
      $str .= $word;
    }
    
    return $str; 
  }
}

$text = "ich bin ein text. das ist die email: email@web.de und ich heisse horschd.";

echo searchEmail($text);

LG
 
Stimmt, an dem Content-Type-Header lag es. Danke.

Jetzt besteht aber das Problem, dass die Grafik ja immer gleich heisst. Was hälst Du für eine gute Möglichkeit, den Grafiknamen dynamisch zu gestalten?
Eine Möglichkeit wäre den Grafiknamen gleich der E-Mail-Adresse zu setzen. Hierbei dürfte es auch keine Probleme geben, wenn eine E-Mail-Adresse mehrmals vorkommt. Denn dann benützen gleiche Adressen ein und das selbe Bild.
Oder siehst Du das anders?

/EDIT: So ich hab das jetzt mal so umgesetzt:

PHP:
function makeEmailPic($email)
  {
    $textnr            = 4;
    $textbreite        = imagefontwidth($textnr) * strlen($email);
    $texthoehe         = imagefontheight($textnr);
    
    $bild              = imagecreate($textbreite , $texthoehe);
    
    $hintergund_farbe  = imagecolorallocate($bild, 255, 255, 255);
    $text_farbe        = imagecolorallocate($bild, 0, 0, 0);
    
    imagestring($bild, $textnr, 0, 0, $email, $text_farbe);
    $pfad              = "pfad/zu/den/bildern";
    $datei             = preg_replace(array("/[@\.]/", "/[!\"#$%&'()*+,\/:;<=>?[\]^_`{|}~]/"), array("-", ""), $email) . ".png";
    imagepng($bild, $pfad . $datei);
    return '<img src="' . $pfad . $datei .'" alt="E-Mail" title="E-Mail" />';
  }

Die E-Mail-Adresse ist gleich dem Namen der Datei. Wobei @ und . (Punkt) durch einen Bindestrich ersetzt werden, und alle anderen Zeichen entfernt werden.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück