我试图使用javascripts .toDataURL()方法上传从canvas元素获取的图像(base64字符串):
var cropped_base64 = $crop_canvas[0].toDataURL('image/jpeg');
cropped_base64 = cropped_base64.replace('data:image/jpeg;base64,','');
$.ajax({
url:the_url,
data:{
base64_string: cropped_base64
},
type:'POST',
success:function(data){
console.log(data)
},
error:function(data){
console.log(data)
}
});
我的服务器端代码对其进行解码:
my $base64_string = param('base64_string')
or return 'error no base 64';
my $image_decoded = MIME::Base64::decode_base64($base64_string)
or return 'error couldnt decode base64';
我需要将此图像作为临时文件传递给另一个例程。
我该怎么生成这个?我无法安装像Image :: magick ......
这样的模块答案 0 :(得分:2)
您已经在标量中获得了已解码的内容。将该标量打印到文件:
open ( my $image, '>:raw', '/path/to/image.png' ) or die $!;
print {$image} $image_decoded;
close ( $image );
如果你想避免使用它的潜在竞争条件,你必须做一些关于唯一命名的事情。 File::Temp
可能是解决这个问题的好方法。
E.g:
use File::Temp qw/ tempfile /;
my ( $output_fh, $filename ) = tempfile();
binmode $output_fh;
print {$output_fh} $image_decoded;
这不会自动删除,因为您要求输入文件名(然后您可以将其传递给其他内容)。