Вы здесь

Как сжимать картинки вставленные исходным кодом в область текста?

0

в офис можно вставлять картинки и сохранять с документом (а не ссылкой). то же происходит при копировании таких документов в область текста - картинки вставляются не ссылками на файлы, а непосредственно исходным кодом.
если эти картинки большие по объёму, как их ужать?

я знаю как сжимать файлы и мог бы это делать для всех файлов в папке картинок, но для этого надо хотя бы научиться сохранять картинки в файлы, вынося их исходники из текста.
картинок много, так что ручное сохранение не поможет. я мог бы только сохранять материал на компьютер и тогда картинки будут класться в папку, но тогда все равно придется их вставлять вручную она за другой.

Версия Drupal: 
7.x
Категория: 
Node API
Связанные проекты: 
ImageAPI
Вопрос задан 26.09.2015 - 20:02

Ответы

2
  1. Пишите плагин который будет реализовывать фильтр для формата ввода. hook_filter_info().
  2. В нём описываете логику. В частности. Раз картинки вставляются в виде "файла" - это Base64 формат, все такие картинки находите через регулярку:

    ^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$
    
  3. Сохраняем найденные Base64 в виде файла, для начала в переменную.

    function base64_to_jpeg($base64_string, $output_file) {
        $ifp = fopen($output_file, "wb"); 
        $data = explode(',', $base64_string);
        fwrite($ifp, base64_decode($data[1])); 
        fclose($ifp); 
        return $output_file; 
    }
    
  4. Эта функция будет возвращать "файл. Его надо сохранить в друпал при помощи команды file_save()

  5. Далее дело за малым. Заменить найденные Base64 строки на <img> с путем до картинки. Тут уже дело вкуса и необходимости либо file_create_url(), либо image_style_url().
Ответ дан 26.09.2015 - 23:49
Аватар пользователя Niklan
Niklan
445

вероятно нужно еще в регулярке определять тип картинки image/jpeg или image/png, etc чтобы расширение файлы задать

Комментарий оставлен 27.09.2015 - 00:52

1,2 с помощью https://rschu.me/convert-and-replace-embedded-base64-images-in-wordpress/ получилось так:

function base64_to_jpg_node_presave($node) {

    //if (module_exists('devel')) dpm($node);
    if (isset($node->body['und'][0]['value'])) {
        //if (module_exists('devel')) dpm($node->body['und'][0]['value']);
        preg_match_all('/data:([-\/\w]+);base64,([0-9a-zA-Z\+\/\=]{20,})/i', $node->body['und'][0]['value'], $images);
        if (module_exists('devel')) dpm($images);
        for ($i=0;$i<count($images);$i+3){
            /* i+3 cause array $images conatain 3 values for each image like: 
             * 1-full string, 2-data type, 3 - base64 string */
            //files actions
        }
    }
}

а третье base64_to_jpeg($base64_string, $output_file) совсем непонятно а в интернет тяжело искать - нигде нету ответов
как правильно указывать имя файла ?
как просмотреть свою папку специальную для таких файлов, допустим, jpegs ?
как называется переменная дефолтной директории файловой системы друпала? то есть
$outpur_file = $default . '/jpegs/filename.jpg';
собственно как мне просмотреть директорию jpegs и узнать нет ли там такого имени файла?
или надо через бд выяснять использованные имена файлов? как через бд?

Комментарий оставлен 27.09.2015 - 01:21
0
  1. Ставите OpenOffice или LibreOffice
  2. Пересохраняете в формат odt или ods
  3. Переименовываете в zip
  4. Распаковываете и радуетесь - внутри присутствует папка с картинками.
    Скриптуете всё это дело сами
Ответ дан 26.09.2015 - 22:11