【问题标题】:Bash - change image urls to base64 in htmlBash - 将图像网址更改为 html 中的 base64
【发布时间】:2013-07-07 14:41:57
【问题描述】:

28我尝试制作一个脚本,将图像源从普通链接转换为 html 文件中的 base64 编码。 但是有一个问题:有时,sed 告诉我

script.sh:第 25 行:/bin/sed:参数列表太长

这是代码:

#!/bin/bash
# usage: ./script.sh file.html


mkdir images_temp

for i in `sed -n '/<img/s/.*src="\([^"]*\)".*/\1/p' $1`;

    do echo "######### download the image";
    wget -P images_temp/ $i;

    #echo "######### convert the image for size saving";
    #convert -quality 70 `echo ${i##*/}` `echo ${i##*/}`.temp;

    #echo "######### rename temp image";
    #rm `echo ${i##*/}` && mv `echo ${i##*/}`.temp `echo ${i##*/}`;

    echo "######### encode in base64";
    k="`echo "data:image/png;base64,"`$(base64 -w 0 images_temp/`echo ${i##*/}`)";

    echo "######### deletion of images_temp pictures";
    rm images_temp/*;

    echo "######### remplace string in html";
    sed -e "s|$i|$k|" $1 > temp.html;

    echo "######### remplace final file";
    rm -rf $1 && mv temp.html $1;

    sleep 5;
done;

我认为当图像大于 ~128ko 时,$k 参数对于 sed 来说太长了; sed 无法处理它。

如何让它发挥作用?

提前谢谢你!

PS1:对于非常丑陋的代码,我们深表歉意

PS2:或者我如何在 python 中做到这一点? PHP ?我开了!

【问题讨论】:

  • 如果有人想使用sed 编辑HTML,我往往不会过于敏感,因为在许多情况下这是可能的。但这是一个典型的例子,它是一个非常糟糕的主意。对于这项工作,您需要一个强大的 html 解析器,因为您需要安全地处理 &lt;img src="some" alt="stupid&gt;alt"&gt; 等标签。使用正则表达式是不可能的...请参阅:stackoverflow.com/a/1732454/632407 ;)
  • 您好 jm666,谢谢您的回答。我知道,但只是为我的情况辩护,它仅适用于包含 40 多个图像的 2 或 3 个 html 文件,不适用于生产。不过,这些 html 文件来自大型 W3C 验证网站。无论如何,这只是为了好玩,以及使用 sed 学习!
  • 啊,所以...在这种情况下,当然,您可以尝试使用 sed 的正则表达式解析上下文无关语法。玩得开心:) :)
  • 玩得开心,掉头发!
  • @jm666 Sed 是图灵完备的,完全不限于正则表达式操作。

标签: python html bash base64


【解决方案1】:

您的 base64 编码图像可以是数兆字节,而系统可能会限制参数的最大长度(传统上约为 128k)。 Sed 也不能保证处理超过 8kb 的行,尽管像 GNU sed 这样的版本可以处理更多。

如果您想尝试使用您的 sed,请在文件中而不是在命令行中提供说明。而不是

sed -e "s|$i|$k|" $1 > temp.html;

使用

echo "s|$i|$k|" > foo.sed
sed -f foo.sed "$1" > temp.html

【讨论】:

  • 花了 8 小时搜索如何提高 MAX_ARG,或使用 xargs,或使用“cat base64 >> file.html”逐行处理 html 文件...解决方案是 简单...代码的乐趣!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
相关资源
最近更新 更多