Он лайн сервис генерации изображений

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Ответить
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Он лайн сервис генерации изображений

Сообщение directman66 » Вт фев 27, 2018 12:08 pm

Коллеги, никто не встречал сервис генерации изображений, например мы ему отправляем текст, а он нам на выходе готовое изображение по какому-либо шаблону? Или анимацию? С прогнозом погоды например.

Один из таких нашел:
1) https://dummyimage.com/
но не получается перенести текст на несколько строк

https://dummyimage.com/800x600/ffffff/0 ... 0%B8%D0%BA

2) http://fpoimg.com/300x300?text=%D0%9F%D ... 0%BD%D1%8F

тоже не переносит текст
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Он лайн сервис генерации изображений

Сообщение directman66 » Вт фев 27, 2018 3:09 pm

Ладно, сам задачу поставил, сам решил!

Сценарий генерации:
СпойлерПоказать

Код: Выделить всё

//TextToImage_my( $text=gg('test.blabla'));
TextToImage_my( gg('test.blabla'));
//TextToImage_my( 'test.blabla');


    // ==== other parameters can be used too, see the function arguments below
function TextToImage_my(
  $text, 
  $separate_line_after_chars=40,  
  $font='./myfont.ttf', 
  $size=24,
  $rotate=0,
  $padding=2,
  $transparent=true, 
  $color=array('red'=>0,'grn'=>0,'blu'=>0), 
  $bg_color=array('red'=>255,'grn'=>255,'blu'=>255) 
){
    $amount_of_lines= ceil(strlen($text)/$separate_line_after_chars);
    $x=explode("\n", $text); $final='';
    foreach($x as $key=>$value){
        $returnes='';
        do{ $first_part=mb_substr($value, 0, $separate_line_after_chars, 'utf-8');
            $value= "\n".mb_substr($value, $separate_line_after_chars, null, 'utf-8');
            $returnes .=$first_part;
        }  while( mb_strlen($value,'utf-8')>$separate_line_after_chars);
        $final .= $returnes."\n";
    }
    $text=$final;
    Header("Content-type: image/png");
    $width=$height=$offset_x=$offset_y = 0;
    if(!is_file($font)) { file_put_contents($font,file_get_contents('https://github.com/edx/edx-certificates/raw/master/template_data/fonts/Arial%20Unicode.ttf')); }

    // get the font height.
    $bounds = ImageTTFBBox($size, $rotate, $font, "W");
    if ($rotate < 0)        {$font_height = abs($bounds[7]-$bounds[1]); } 
    elseif ($rotate > 0)    {$font_height = abs($bounds[1]-$bounds[7]); } 
    else { $font_height = abs($bounds[7]-$bounds[1]);}
    // determine bounding box.
    $bounds = ImageTTFBBox($size, $rotate, $font, $text);
    if ($rotate < 0){       $width = abs($bounds[4]-$bounds[0]);                    $height = abs($bounds[3]-$bounds[7]);
                            $offset_y = $font_height;                               $offset_x = 0;
    } 
    elseif ($rotate > 0) {  $width = abs($bounds[2]-$bounds[6]);                    $height = abs($bounds[1]-$bounds[5]);
                            $offset_y = abs($bounds[7]-$bounds[5])+$font_height;    $offset_x = abs($bounds[0]-$bounds[6]);
    } 
    else{                   $width = abs($bounds[4]-$bounds[6]);                    $height = abs($bounds[7]-$bounds[1]);
                            $offset_y = $font_height;                               $offset_x = 0;
    }

    $image = imagecreate($width+($padding*2)+1,$height+($padding*2)+1);

    $background = ImageColorAllocate($image, $bg_color['red'], $bg_color['grn'], $bg_color['blu']);
    $foreground = ImageColorAllocate($image, $color['red'], $color['grn'], $color['blu']);

    if ($transparent) ImageColorTransparent($image, $background);
    ImageInterlace($image, true);
  // render the image
    ImageTTFText($image, $size, $rotate, $offset_x+$padding, $offset_y+$padding, $foreground, $font, $text);
    imagealphablending($image, true);
    imagesavealpha($image, true);
  // output PNG object.
    imagePNG($image);
}
    //======helper function==========
    if(!function_exists('mb_substr_replace')){
      function mb_substr_replace($string, $replacement, $start, $length = null, $encoding = "UTF-8") {
        if (extension_loaded('mbstring') === true){
            $string_length = (is_null($encoding) === true) ? mb_strlen($string) : mb_strlen($string, $encoding);
            if ($start < 0) { $start = max(0, $string_length + $start); }
            else if ($start > $string_length) {$start = $string_length; }
            if ($length < 0){ $length = max(0, $string_length - $start + $length);  }
            else if ((is_null($length) === true) || ($length > $string_length)) { $length = $string_length; }
            if (($start + $length) > $string_length){$length = $string_length - $start;} 
            if (is_null($encoding) === true) {  return mb_substr($string, 0, $start) . $replacement . mb_substr($string, $start + $length, $string_length - $start - $length); }
            return mb_substr($string, 0, $start, $encoding) . $replacement . mb_substr($string, $start + $length, $string_length - $start - $length, $encoding);
        }
        return (is_null($length) === true) ? substr_replace($string, $replacement, $start) : substr_replace($string, $replacement, $start, $length);
      }
    }
сценарий сохранения и отправки
СпойлерПоказать

Код: Выделить всё

sg('test.blabla', 'это текст ёпа!');

$image_url='http://192.168.1.35/objects/?script=strtoimage';


$result=getURL($image_url,0);
$save_to="./cached/blabla.jpg"; // куда сохранять
SaveFile($save_to, $result);

//отправляем картинку в телеграмм
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendImageToAll($save_to);

СпойлерПоказать
Безымянныйdsd.png
Безымянныйdsd.png (79.02 КБ) 2597 просмотров
Можете нажать "спасибо"
Последний раз редактировалось directman66 Вт фев 27, 2018 3:17 pm, всего редактировалось 1 раз.
За это сообщение автора directman66 поблагодарил:
tarasfrompir (Вт фев 27, 2018 9:53 pm)
Рейтинг: 1.16%
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
savenko_egor
Сообщения: 705
Зарегистрирован: Вс авг 03, 2014 8:17 pm
Откуда: Украина, Запорожье
Благодарил (а): 108 раз
Поблагодарили: 147 раз
Контактная информация:

Re: Он лайн сервис генерации изображений

Сообщение savenko_egor » Вт фев 27, 2018 3:10 pm

А в чём смысл такого?
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

Re: Он лайн сервис генерации изображений

Сообщение directman66 » Вт фев 27, 2018 3:16 pm

А например уведомление отправить на телик, или терминал, который поддерживает только вывод изображения.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
xor
Сообщения: 2039
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 286 раз
Поблагодарили: 629 раз

Re: Он лайн сервис генерации изображений

Сообщение xor » Вт фев 27, 2018 9:52 pm

У m-malva было, только не онлайн
img_reportПоказать

Код: Выделить всё

//Картинка-информер для телеграмм 
  define('WIDTH', 230);
  define('HEIGHT', 230);
  $font="./cms/font/impact.ttf";
  $image = imagecreatetruecolor(WIDTH,HEIGHT)
  or die('Cannot create image');
  $image = imageCreateFromPng("C:/_majordomo/htdocs/images/report.png");

  imagettftext($image,14,0,60,140,0xffa500,"$font","Дома ".getGlobal('ws.Tempinside').'°C, '.getGlobal('ws.relHumInside').'%.');
  imagettftext($image,14,0,70,165,0xffa500,"$font","На улице ".getGlobal('ws.tempoutside').'°C ');
 $alarmmsg=gg('ThisComputer.timeNow'); 
 $alarm="0";
 $alarmname=gg('ThisComputer.DateNow');


 $sizefont="16";
 $colorfont="0xFFFFFF";
 $WIDTHMSG="30";
 $HEIGHTMSG="85";
 $sizefont1="16";
 $colorfont1="0xFFFFFF";
 $WIDTHMSG1="50";
 $HEIGHTMSG1="110";

  imagettftext($image,$sizefont,0,$WIDTHMSG,$HEIGHTMSG,$colorfont,"$font",$alarmmsg);
  imagettftext($image,$sizefont1,0,$WIDTHMSG1,$HEIGHTMSG1,$colorfont,"$font",$alarmname);
 
$res='';
 if (gg('Security.stateColor')=='green' && gg('System.stateColor')=='green' && gg('Communication.stateColor')=='green') {
  $res='Все системы работают';
     $colorstat="0x00FF00";
 } else {
  if (gg('Security.stateColor')!='green') {
   $colorstat="0xff3030";
   $res.="Проблема безопасности: ".getGlobal('Security.stateDetails');
  }
  if (gg('System.stateColor')!='green') {
   $res.="Системная проблема: ".getGlobal('System.stateDetails');
   $colorstat="0xff3030";
  }  
  if (gg('Communication.stateColor')!='green') {
   $res.=" Проблема связи: ".getGlobal('Communication.stateDetails');
   $colorstat="0xff3030";
  }  
 }
$aa=0;
if ($aa == "0") $colortlevel="0x008b00";
if ($aa == "1") $colortlevel="0x008b00";
if ($aa == "2") $colortlevel="0xc0ff3e";
if ($aa == "3") $colortlevel="0xcaff70";
if ($aa == "4") $colortlevel="0xfff68f";
if ($aa == "5") $colortlevel="0xffff00";
if ($aa == "6") $colortlevel="0xff8247";
if ($aa == "7") $colortlevel="0xff3030";
if ($aa == "8") $colortlevel="0xcd2626";
if ($aa == "9") $colortlevel="0x8b1a1a";
if ($aa == "10") $colortlevel="0x8b1a1a";


    imagettftext($image,12,0,20,20,0xffa500,"$font",'USD: '.gg('usd.value'));
    imagettftext($image,12,0,20,40,0xffa500,"$font",'EURO: '.gg('eur.value'));
    //imagettftext($image,12,0,150,20,$colortlevel,"$font",'Пробки: '.$aa);
    imagettftext($image,10,0,20,190,$colorstat,"$font",gg('ThisComputer.somebodyHomeText'));
    imagettftext($image,10,0,20,210,$colorstat,"$font",$res);

  header('Content-type: image/png');
  imagepng($image,"C:/_majordomo/htdocs/cms/images/report.png");
  imagedestroy($image);
2018-02-27_21-51-43.png
2018-02-27_21-51-43.png (129.95 КБ) 2557 просмотров
За это сообщение автора xor поблагодарил:
directman66 (Ср фев 28, 2018 6:50 am)
Рейтинг: 1.16%
Ответить