Parsedown设置图像宽度和高度

时间:2017-01-10 05:24:42

标签: php codeigniter 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">
  解析库中的

问题有任何方法可以修改它,因此可以获得   并设置图像的宽度和高度?

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 个答案:

答案 0 :(得分:5)

此(参考)语法[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的大小)。

答案 1 :(得分:0)

accepted answer稍有不同,my comment解决了“尺寸只有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;
    }
}

请注意,通过这种方式,将宽度或高度设置为零将自动保持原始宽高比,在某些应用中可能非常有用。