gpt4 book ai didi

perl - Perl将图像转换为base64

转载 作者:行者123 更新时间:2023-12-04 13:28:24 24 4
gpt4 key购买 nike

我正在使用一项服务将图片发送到服务器,并且他们要求在发送图片之前将图片转换为base64格式。我用以下代码尝试了MIME::Base64:

use MIME::Base64 ();

open (IMAGE, "C:\\wamp\\www\\image.png") or die "$!";

$base64_string = IMAGE;
$encoded = encode_base64($base64_string);
print "Encode $encoded";

并收到此错误消息
Undefined subroutine &mqin::encode_base64 called at line 6.

最佳答案

指定空的导入列表时,如下所示:

use MIME::Base64 ();

您没有进口。这意味着函数名称 encode_base64将不会导入到调用者的 namespace 中。您可以允许进行导入,也可以通过在调用函数时显式引用驻留在其中的程序包来完全限定函数名。

要导入,请将该行更改为:
use MIME::Base64;
()括号指定MIME::Base64不会将任何内容导出到您的 namespace 。默认行为(不带括号)是导出 encode_base64decode_base64。通过在导入列表中使用空括号,您将覆盖导入这两个函数名称的方便的默认行为。如果您确实不希望这些函数污染 main命名空间,则可以保留原始的 use MIME::Base64 ()行,然后完全限定子例程调用:
$encoded = MIME::Base64::encode_base64($base64_string);

但是,通过从 use行中删除括号来允许处理默认导出列表,这要容易得多,并且可能令人满意。

或者,您可以确切指定要导入的内容:
use MIME::Base64 ('encode_base64');

这将仅导入 encode_base64函数,而不会导入 decode_base64,从而最小化 namespace 污染。

更新您也没有在读取文件。这行:
$base64_string = IMAGE;

...应该这样更新:
$raw_string = do{ local $/ = undef; <IMAGE>; };
$encoded = encode_base64( $raw_string );

如果您启用了 use strict 'subs',则可能会更详细地解决该问题。问题在于“ IMAGE”本身仅仅是一个空词,Perl认为这是一个子例程调用。尖括号“ <>”是从文件句柄读取的常用方法。 “ local $/ = undef”部分只是一种确保您抓取整个文件的方法,而不仅仅是直到Perl的第一个看起来像“\n”的序列。

Update2:并且正如MOB指出的那样,您要么需要在路径中转义反斜杠,要么使用正斜杠。 Perl不在乎,即使在Win32上也是如此。当然,由于您正在明智地在 or die $!上使用 open,因此您已经发现了此错误。

关于perl - Perl将图像转换为base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11301854/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com