1 回答
TA贡献1811条经验 获得超4个赞
我找到了一个不涉及使用 ampify_img 函数而只涉及放大器本身的解决方案,改变了布局。对于那些曾经有同样困难的人来说,必须实现放大器将他们的<img>标签图像<amp-img>即时转换为标签,这是一个解决方案,但图像布局是固定的,保留了纵横比。.
我也不知道检查长内容中的每个图像大小并写入标签会消耗多少 cpu 和 ram。但我认为这将是理想的选择,为每个图像编写特定的宽度和高度,而不是分配固定的布局。
解决方案实施起来非常简单:
function img_to_amp ($html) {
preg_match_all("#<img(.*?)\\/?>#", $html, $matches);
foreach ($matches[1] as $key => $m) {
preg_match_all('/(alt|src|width|height)=("[^"]*")/i', $m, $matches2);
$amp_tag = '<div class="fixed-height-container"><amp-img ';
foreach ($matches2[1] as $key2 => $val) {
$amp_tag .= $val .'='. $matches2[2][$key2] .' ';
}
$amp_tag .= 'class="contain" layout="fill"';
$amp_tag .= '>';
$amp_tag .= '</amp-img></div>';
$html = str_replace($matches[0][$key], $amp_tag, $html);
}
return $html;
}
只需要放: <div class="fixed-height-container">之前<amp-img
并更改:$amp_tag .= 'layout="responsive"'; 到:$amp_tag .= 'class="contain" layout="fill"';
和</div>最后一个结束$amp_tag .= '</amp-img></div>';
您可以在我找到此解决方案的地方查看 amp 教程: amp.dev 站点
这样你就不需要沿着图像标签提供宽度和高度模式。
更新:ampify_img 的作者返回了我的电子邮件,所以这里有一个更好的方法。PHP 从那里检查 img src 和 getimagesize()。通过这种方式,图像变得具有响应性。
function img_to_amp ($html) {
preg_match_all("#<img(.*?)\\/?>#", $html, $img_matches);
foreach ($img_matches[1] as $key => $img_tag) {
preg_match_all('/(alt|src|width|height)=["\'](.*?)["\']/i', $img_tag, $attribute_matches);
$attributes = array_combine($attribute_matches[1], $attribute_matches[2]);
if (!array_key_exists('width', $attributes) || !array_key_exists('height', $attributes)) {
if (array_key_exists('src', $attributes)) {
list($width, $height) = getimagesize($attributes['src']);
$attributes['width'] = $width;
$attributes['height'] = $height;
}
}
$amp_tag = '<amp-img ';
foreach ($attributes as $attribute => $val) {
$amp_tag .= $attribute .'="'. $val .'" ';
}
$amp_tag .= 'layout="responsive"';
$amp_tag .= '>';
$amp_tag .= '</amp-img>';
$html = str_replace($img_matches[0][$key], $amp_tag, $html);
}
return $html;
}
您还可以检查代码并在https://gist.github.com/elalemanyo/034490164beb7b935559585ff1cc7d9f 上做出贡献
- 1 回答
- 0 关注
- 156 浏览
添加回答
举报