当前位置: 首页 > 知识库问答 >
问题:

在React Native中自动调整图像组件的大小

谷出野
2023-03-14

我想将Image组件的宽度设置为容器宽度的100%,并根据结果宽度值和图像的纵横比设置高度。

我的容器有一些填充,这意味着 Dimensions.get('window')宽度对我来说没有用,因为它没有给我图像宽度设置为 100% 所产生的值。其他方案也无法将维度 API 作为可接受的解决方案

下面是一个代码示例:

<View
  style={{
    flex: 1,
    paddingHorizontal: 20,
  }}>
  <Image
    style={{
      flex: 1, // Not what I want => just so I can see the image
      width: '100%',
      // height: 'auto', // The behavior that I want
      backgroundColor: 'red',
    }}
    resizeMode={'contain'}
    source={{
      uri: 'https://via.placeholder.com/200x400/000000',
    }}
  />
</View>

结果:

红色背景只是为了显示< code>Image组件

使用onLayoutprop,我可以获得结果宽度的运行时值,并且借助Image API,我可以计算所需的高度。问题是React Native将首先渲染一个0高度组件,然后onLayout似乎就解决了,这很有意义。

所以

  • 有没有办法事先获得像这样的图像组件的宽度值(使用相对宽度声明)?
  • 在 React Native 中是否可以自动设置图像高度?如果是这样,如何?

注:在React Native的图像文档中,有一个解释,说明了为什么他们选择默认情况下不自动调整图像组件的大小至少在这种情况下,ParentonLayout在其子级之后解析。

共有1个答案

戎劲
2023-03-14

在组件DidMount中,您可以计算图像度量,然后使用该高度和宽度计算aspectRatio。

componentDidMount = () => {
   Image.getSize(YourUri, (width, height) => {
      this.setState({width, height});
    });
}

在您的图像中,您将添加如下样式:

  <Image
    style={{
      width: '100%',
      backgroundColor: 'red',
      aspectRatio: this.state.height !== null ? this.state.width / this.state.height : 1
    }}
    resizeMode={'contain'}
    source={{
      uri: 'https://via.placeholder.com/200x400/000000',
    }}
  />

如 React 原生文档中所述:

纵横比控制节点的未定义维度的大小。纵横比是一个非标准属性,仅在React Native中可用,在CSS中不可用。

-在具有设置的宽度/高度长宽比的节点上控制未设置尺寸的大小

-在设置了伸缩基准纵横比的节点上,控制横轴上节点的大小(如果未设置)

-在具有度量函数长宽比的节点上,度量函数的工作原理就像度量弹性基一样

-在具有挠性增大/收缩长宽比的节点上,如果未设置,则控制十字轴中节点的大小

宽高比考虑了最小/最大尺寸

 类似资料:
  • 我的目的是绘制一个上传的图像,我不知道的尺寸在一个PDF文件的一个空页(DINA4)。对于水平图像,我有一个带有一个水平空页的PDF文件,对于垂直图像,我有一个带有一个垂直页的PDF文件。 这是我到目前为止的代码: 对于垂直图像,一切工作都很好(我更希望图像在页面的中心,但这将是下一步)。

  • 问题内容: 我正在使用Grails开发网络相册,并且用于图像处理,正在使用grails-image-tools插件。如果上传的图像太大(例如:大于600 * 840),我需要一种功能来调整图像的大小。在这种情况下,我需要将此图像调整为600 * 840)。最有效的方法是什么?非常感谢。 问题答案:

  • 问题内容: 我目前正在尝试在我的网站上制作一个图像地图,该图像地图会根据窗口的大小进行调整…我想知道是否可以通过HTML来执行此操作,还是必须使用Javascript或其他方式来执行此操作?语言。 问题答案: 如果最终使用JavaScript完成任务,则可以使用以下跨浏览器代码段来调整元素中所有区域的大小。 必须等于原始图像的宽度。您还需要在HTML中使用一些相对单位:

  • 问题内容: 我在这里使用Go调整大小包:https://github.com/nfnt/resize 我正在从S3中提取图像,如下所示: // this gives me data []byte 之后,我需要调整图像大小: // problem is that the original_image has to be of type image.Image 将图像上传到我的S3存储桶 // pro

  • 在这两个场景中,代码都没有改变,只是相同映像的测试用例 原始图像 调整图像大小(224x224) 图像预处理的代码为: 两者接近后的结果(图像): 结果比较图像 截图下方调试代码格式为 :{trueLabel}{predictedLabel}{model输出}: 请帮助我解决这一点,因为在运行应用程序,图像将上传的原始大小。

  • 我有一个尺寸为800x800的图像,其大小为170 kb。我想将此图像调整为600x600。调整大小后,我希望缩小图像大小。我该怎么做?