UPDATE
ฉันพบการเชื่อมโยงที่น่าสนใจถึงวิธีการแก้ปัญหาของคุณได้ใน PHP ฉันคิดว่าคุณลืมแทนที่space
ด้วย+
ตามที่แสดงในลิงค์
ฉันใช้แวดวงนี้จากhttp://images-mediawiki-sites.thefullwiki.org/04/1/7/5/6204600836255205.pngเป็นตัวอย่างซึ่งดูเหมือนว่า:
ต่อไปฉันใส่มันผ่านhttp://www.greywyvern.com/code/php/binary2base64ซึ่งส่งคืนฉัน:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAAB3RJTUUH1QEHDxEhOnxCRgAAAAlwSFlzAAAK8AAACvABQqw0mAAAAXBJREFUeNrtV0FywzAIxJ3+K/pZyctKXqamji0htEik9qEHc3JkWC2LRPCS6Zh9HIy/AP4FwKf75iHEr6eU6Mt1WzIOFjFL7IFkYBx3zWBVkkeXAUCXwl1tvz2qdBLfJrzK7ixNUmVdTIAB8PMtxHgAsFNNkoExRKA+HocriOQAiC+1kShhACwSRGAEwPP96zYIoE8Pmph9qEWWKcCWRAfA/mkfJ0F6dSoA8KW3CRhn3ZHcW2is9VOsAgoqHblncAsyaCgcbqpUZQnWoGTcp/AnuwCoOUjhIvCvN59UBeoPZ/AYyLm3cWVAjxhpqREVaP0974iVwH51d4AVNaSC8TRNNYDQEFdlzDW9ob10YlvGQm0mQ+elSpcCCBtDgQD7cDFojdx7NIeHJkqi96cOGNkfZOroZsHtlPYoR7TOp3Vmfa5+49uoSSRyjfvc0A1kLx4KC6sNSeDieD1AWhrJLe0y+uy7b9GjP83l+m68AJ72AwSRPN5g7uwUAAAAAElFTkSuQmCC
บันทึกสตริงนี้base64
ที่ฉันอ่านจากในรหัสของฉัน
var fs = require('fs'),
data = fs.readFileSync('base64', 'utf8'),
base64Data,
binaryData;
base64Data = data.replace(/^data:image\/png;base64,/, "");
base64Data += base64Data.replace('+', ' ');
binaryData = new Buffer(base64Data, 'base64').toString('binary');
fs.writeFile("out.png", binaryData, "binary", function (err) {
console.log(err); // writes out file without error, but it's not a valid image
});
ฉันได้วงกลมกลับมา แต่สิ่งที่ตลกคือขนาดไฟล์เปลี่ยนไป:) ...
END
เมื่อคุณอ่านภาพกลับฉันคิดว่าคุณต้องตั้งค่าส่วนหัว
ยกตัวอย่างimagepngจากหน้า PHP:
<?php
$im = imagecreatefrompng("test.png");
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
ฉันคิดว่าบรรทัดที่สองheader('Content-Type: image/png');
เป็นสิ่งสำคัญภาพของคุณจะไม่ปรากฏในเบราว์เซอร์ แต่มีเพียงข้อมูลไบนารีจำนวนมากเท่านั้นที่ปรากฏในเบราว์เซอร์
ในExpressคุณเพียงแค่ใช้สิ่งที่ต้องการด้านล่าง ฉันจะแสดง Gravatar ของคุณซึ่งตั้งอยู่ที่http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG
และเป็นไฟล์ JPEG curl --head http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG
เมื่อคุณ ฉันขอส่วนหัวเท่านั้นเพราะมิฉะนั้น curl จะแสดงไฟล์ไบนารีจำนวนมาก (Google Chrome จะดาวน์โหลดทันที) เพื่อคอนโซล:
curl --head "http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 03 Aug 2011 12:11:25 GMT
Content-Type: image/jpeg
Connection: keep-alive
Last-Modified: Mon, 04 Oct 2010 11:54:22 GMT
Content-Disposition: inline; filename="cabf735ce7b8b4471ef46ea54f71832d.jpeg"
Access-Control-Allow-Origin: *
Content-Length: 1258
X-Varnish: 2356636561 2352219240
Via: 1.1 varnish
Expires: Wed, 03 Aug 2011 12:16:25 GMT
Cache-Control: max-age=300
Source-Age: 1482
$ mkdir -p ~/tmp/6922728
$ cd ~/tmp/6922728/
$ touch app.js
app.js
var app = require('express').createServer();
app.get('/', function (req, res) {
res.contentType('image/jpeg');
res.sendfile('cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG');
});
app.get('/binary', function (req, res) {
res.sendfile('cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG');
});
app.listen(3000);
$ wget "http://www.gravatar.com/avatar/cabf735ce7b8b4471ef46ea54f71832d?s=32&d=identicon&r=PG"
$ node app.js