Parsedown установить ширину и высоту изображения

В настоящее время я использую CodeIgniter 3.1.3 и Parsedown / Markdown Guide

С разбором я бы хотел иметь возможность установить ширину и высоту изображения

![enter image description][1]

[1]: http://www.example.com/image.png '100x200' <-- widthxheight

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

Выход будет

<img src="http://www.example.com/image.png" width="100" height="200" alt="enter image description">

Вопрос в библиотеке parsedown есть ли способ ее изменить, чтобы можно было получить и установить ширину и высоту изображения?

protected function inlineImage($Excerpt)
{
    if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
    {
        return;
    }

    $Excerpt['text']= substr($Excerpt['text'], 1);

    $Link = $this->inlineLink($Excerpt);

    if ($Link === null)
    {
        return;
    }

    $Inline = array(
        'extent' => $Link['extent'] + 1,
        'element' => array(
            'name' => 'img',
            'attributes' => array(
                'src' => $Link['element']['attributes']['href'],
                'alt' => $Link['element']['text'],
                'width' => '',
                'height' => ''
            ),
        ),
    );

    $Inline['element']['attributes'] += $Link['element']['attributes'];

    unset($Inline['element']['attributes']['href']);

    return $Inline;
}

2 ответа

Решение

Последний элемент из этого (ссылочного) синтаксиса [1]: http://www.example.com/image.png '100x200'

Будет передан как title атрибут, так что вы можете сделать это следующим образом:

class MyParsedown extends Parsedown
{
    protected function inlineImage($Excerpt)
    {
        $Inline = parent::inlineImage($Excerpt);

        if (!isset($Inline['element']['attributes']['title'])) { return $Inline; }

        $size = $Inline['element']['attributes']['title'];

        if (preg_match('/^\d+x\d+$/', $size)) {
            list($width, $height) = explode('x', $size);

            $Inline['element']['attributes']['width'] = $width;
            $Inline['element']['attributes']['height'] = $height;

            unset ($Inline['element']['attributes']['title']);
        }

        return $Inline;
    }
}

Атрибут будет изменен на width+height если title Матчи NUMERICxNUMERIC шаблон. Вы можете ограничить количество цифр или размер для защиты разбиения страницы, также следует исключить также начальный 0 (или размеры только с 0).

Просто небольшое отклонение от принятого ответа, который решает проблему "размеров только с 0".

class MyParsedown extends Parsedown
{
    protected function inlineImage($Excerpt)
    {
        $Inline = parent::inlineImage($Excerpt);

        if (!isset($Inline['element']['attributes']['title'])) { return $Inline; }

        $size = $Inline['element']['attributes']['title'];

        if (preg_match('/^\d+x\d+$/', $size)) {
            list($width, $height) = explode('x', $size);

            if($width > 0) $Inline['element']['attributes']['width'] = $width;
            if($height > 0) $Inline['element']['attributes']['height'] = $height;

            unset ($Inline['element']['attributes']['title']);
        }

        return $Inline;
    }
}

Обратите внимание, что таким образом, установка ширины или высоты на ноль автоматически сохранит исходное соотношение сторон, что в некоторых приложениях может быть очень полезным.

Другие вопросы по тегам