如何将 IonImg 元素的图像数据设置为“Buffer”类型变量的内容?

问题描述 投票:0回答:1

我正在使用 Ionic 7 和 React 18。我定义了这种类型

interface Card {
    ...
  frontImg: Buffer;
  frontImgAltText: string;
    ...
}

在我的组件中,如何将 IonImg 元素的图像设置为上述缓冲区中的图像数据?我试过这个

 const base64Data = card.frontImg.toString("base64");
  const dataUri = `data:image/png;base64,${base64Data}`;

      <IonImg src={dataUri} alt="My Image" />

但是尽管当我将变量输出到 console.log 时我看到了二进制内容,但什么也没有出现。

reactjs image ionic-framework buffer src
1个回答
0
投票

要在 Ionic React 应用程序中的 IonImg 组件中显示来自 Buffer 的图像,您可以将 Buffer 转换为 base64 数据 URI,并将其用作 IonImg 组件的 src 属性。但是,Ionic React 不支持直接使用数据 URI 作为 src 属性。

为了克服此限制,您可以创建一个自定义组件来处理从缓冲区数据渲染图像。这是一个例子:

import { IonImg } from '@ionic/react';
import React from 'react';

interface CardProps {
  card: Card;
}

const CardComponent: React.FC<CardProps> = ({ card }) => {
  const [imageSrc, setImageSrc] = React.useState('');

  React.useEffect(() => {
    const base64Data = Buffer.from(card.frontImg).toString('base64');
    const dataUri = `data:image/png;base64,${base64Data}`;
    setImageSrc(dataUri);
  }, [card.frontImg]);

  return <IonImg src={imageSrc} alt={card.frontImgAltText} />;
};

export default CardComponent;

在此示例中,我们创建一个 CardComponent,它将卡片对象作为 prop。在组件内部,我们使用 React.useState 和 React.useEffect 将 frontImg Buffer 转换为 base64 数据 URI,并将其设置为 IonImg 组件的 src 值。通过使用带有包含card.frontImg的依赖数组的React.useEffect,我们确保只要frontImg数据发生变化,图像就会重新渲染。

然后您可以在主组件中使用此 CardComponent,如下所示

import React from 'react';
import CardComponent from './CardComponent';

const MainComponent: React.FC = () => {
  const card: Card = {
    // ... card properties
    frontImg: bufferData, // Replace with your specific Buffer data
    frontImgAltText: 'My Image Alt Text',
    // ... other card properties
  };

  return (
    <div>
      {/* ... other content */}
      <CardComponent card={card} />
    </div>
  );
};

export default MainComponent;
© www.soinside.com 2019 - 2024. All rights reserved.