gpt4 book ai didi

image - 从 blob 读取二进制数据以显示图像 React Native

转载 作者:行者123 更新时间:2023-12-02 19:48:59 37 4
gpt4 key购买 nike

这是我必须做的事情的流程:

  1. 使用图像选择器获取图像以进行 native react ,并获取 Base64 格式的图像数据 (sourceData)
ImagePicker.showImagePicker(imagePickerOptions, (response) => {
const sourceData = { uri: 'data:image/jpeg;base64,' + response.data };
});
  • sourceData.uri 发布到我的计算机上本地运行的服务器:
  • const data = new FormData();
    data.append('receipt', {
    uri: sourceData.uri,
    type: 'image/jpeg',
    name: 'receipt'
    });

    const response = await fetch(SERVER_POST_ROUTE, {
    method: 'POST',
    headers: {
    'Accept': 'application/json',
    'Content-Type': 'multipart/form-data',
    },
    body: data
    });

    sourceData.uri 如下所示:

    'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBYRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABLKADAAQAAAABAAAA4QAAAAD/7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/8AAEQgA4QEsAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMABgYGBgYGCgYGCg4KCgoOEg4ODg4SFxISEhISFxwXFxcXFxccHBwcHBwcHCIiIiIiIicnJycnLCwsLCwsLCwsLP/bAEMBBwcHCwoLEwoKEy4fGh8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u<…>'
  • 这是服务器 POST 路由(缩短)
  • router.post('/:id/receipts', (req, res) => {
    const id = req.params.id
    const expense = expenses.find((expense) => expense.id === id)

    if (expense) {
    const receipt = req.files.receipt as UploadedFile
    const receiptId = `${id}-${expense.receipts.length}`
    receipt.mv(`${process.cwd()}/receipts/${receiptId}`, (err) => {

    expense.receipts.push({
    url: `/receipts/${receiptId}`
    })
    res.status(200).send(expense)

    })

    } else {
    res.status(404)
    }
    })
  • 这就是我console.log(receipt)时服务器得到的内容
  • { name: 'receipt',
    data:
    <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 48 00 48 00 00 ff e1 00 58 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 02 01 12 00 03 00 00 00 01 00 01 ... >,
    encoding: '7bit',
    truncated: false,
    mimetype: 'image/jpeg',
    md5: SOME_MD5_STRING,
    mv: [Function: mv] }
  • 如您所见,服务器将文件移动到本地位置 receipt.mv(`${process.cwd()}/receipts/${receiptId}`)
  • <强>6。我的问题:我需要访问此位置并将我得到的内容转换回图像

    我现在在做什么:- 使用 fetch 获取该位置的内容并提取 blob

    const response = await fetch(FILE_LOCAL_URL);
    const blob = await response.blob();
    • 这就是我在 console.log(blob)
    • 时得到的结果
    { _data: 
    { size: 23296,
    offset: 0,
    blobId: 'F8F693CD-6FBB-41C8-95E3-E54EB2A82F63',
    type: 'application/octet-stream',
    name: '5b996064dfd5b783915112f5-3' } }

    现在:我不知道如何将此二进制文件转换为 Base64 字符串以添加到图像的 uri 中。这就是我尝试过的,但显然它不起作用:

    <Image 
    source={{ uri: 'data:image/jpeg;base64,' + blob._data }}
    style={{height: 120, width: 80}}/>

    非常感谢任何帮助。谢谢

    最佳答案

    实际上我解决了这个问题:理想情况下,要读取 blob,您应该使用 readAsArrayBuffer ,但它并未在 React Native 中实现(另请参阅 https://forums.expo.io/t/blob-object-how-can-i-access-the-blobs-raw-data-as-an-arraybuffer/9717 )。但您可以使用readAsDataURL我要查找的内容存储在 reader.result 中。

    const response = await fetch(URL_OF_BINARY_DATA_FILE);
    const blob = await response.blob();
    var reader = new FileReader();
    reader.onload = () => {
    console.log(reader.result);
    }
    reader.readAsDataURL(blob);

    关于image - 从 blob 读取二进制数据以显示图像 React Native,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58679178/

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