вградете динамично изображение, създадено от GD, в имейл с помощта на PHP

Като за начало използвам следното:

  • php 5.3
  • PHPmailer - за изпращане на stmp имейл с приложения на Google
  • GD за създаване на iamge

  • Мога да взема съществуващ преди това файл, да добавя текст към този файл и да го извеждам в браузър.

  • Мога да изпращам имейл със съществуващо вградено изображение, като използвам прости функции в рамките на phpmailer
  • Аз НЕ мога да променя динамично първия файл, да го запазя в паметта, след което да вградя ТОВА изображение в моя имейл.

Когато създавам изображението си, използвам много елементарен примерен скрипт:

РЕДАКТИРАНЕ

Промених кода си до следното: изглежда, че работи по-бързо, както и по-лесно за четене. Въпреки това се създава действителен файл, докато аз бих предпочел временен файл, който мога да унищожа след това, или просто да използвам двоични данни. Има ли функция за двоичен изход, подобна на imagegif()?

$photo = imagecreatefromgif('sample.gif');
imagealphablending($photo, true);
$fontsize = 20;
$font = '../times.ttf';
$fontcolor = imagecolorallocate($photo, 0, 0, 0);
$angle = 0;
$x = 100;
$y = 100;
$text = 'THIS IS A BLOB OF TEXT YO!';
imagettftext($photo, $fontsize, $angle, $x, $y, $fontcolor, $font, $text);
imagegif($photo, 'test.gif');

за съжаление, това иска да изведе моя файл в браузъра, след което да продължи с останалата част от скрипта и да изпрати имейла (без вградено изображение).

Знам, че вероятно пропускам нещо просто, но някой сблъсквал ли се е с този проблем преди?


person JM4    schedule 05.07.2011    source източник
comment
Ще трябва да кодирате изображението, така че да може да се зарежда от URL адрес на данни, или да го запишете във временен файл, от който да се прикачи библиотеката на пощата.   -  person Marc B    schedule 06.07.2011
comment
IIRC PHPmailer може дори да създава прикачени файлове от двоични данни. Така че една низова променлива може дори да го направи вече.   -  person hakre    schedule 06.07.2011
comment
имате ли препоръки за функции, изтриващи временни файлове, записани на диск (test.gif в примера по-горе)   -  person JM4    schedule 06.07.2011
comment
Забравих да спомена, че използвам unlink();   -  person JM4    schedule 06.07.2011


Отговори (1)


Първо трябва да а) запишете изображението във временен файл, като използвате втория аргумент на функцията imagegif; б) използвайте буфериране на изхода на PHP, за да уловите резултата, изпратен към изхода, и да го изчистите от отговора (вижте http://php.net/ob).

След това трябва да знаете как да вградите изображението като прикачен файл към имейл писмото или да го копирате като истински файл с наличен http адрес и да посочите <img href="/bg"/> към него.

person Gedrox    schedule 05.07.2011
comment
Мога да вградя истинско (или временно) изображение без проблем. Вярвам, че предизвикателството ми дойде в простото генериране на самия временен файл. Не знаех, че функцията imagegif може да запише файл по този начин. Добре е да знаете (въпреки че се чудя дали простото генериране на двоични данни би било по-ефективно) - person JM4; 06.07.2011