expo-image - blurhash placeholder and contentFit -> incorect blurhash size

There is an “bug” (probably) when using blurhash as placeholder in expo-image. Blurhash is always considered as square (1:1) and when contentFit is set to anything else than fill, it will be rendered incorrectly.


If blurhash is passed to placeholder prop, it should always be rendered as ‘fill’. Blurhash is always rendered as square, no matter the width / height and componentX / componentY set while creating the blurhash.

Example image: https://slavia.esports.cz/foto/2022_7.-kolo-Slovacko-Slavia-1-1/4-9-2022-72.jpg
and corresponding blurhash: UBEVWm}C_1%30x1H0gIU=}=e-o%f0eT0RjMy

Testing with expo-image 1.0.0 and Expo SDK 48.0.6.
btw: I would swear, that expo-image betas were rendering blurhash correctly, but I’m not sure if I had contentFit set to contain or cover :innocent:

Hi @soukupl

I agree this is unexpected behaviour. Seems to me like it’s worth creating an issue in the expo/expo repository.

I suggest you post a full example there to avoid any possible misunderstandings. e.g. I used this, which is based on the example in the documentation:

import 'expo-dev-client';
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, View } from 'react-native';
import { Image } from 'expo-image';

const blurhash = 'LYA,ty-Va^ogo$juWAWV4,I:jbae';

export default function App() {
  return (
    <View style={styles.container}>
          width: 350,
          height: 200,
          borderWidth: 2,
          borderColor: 'green',
      <StatusBar style="auto" />

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  image: {
    flex: 1,
    width: '100%',
    backgroundColor: '#0553',
1 Like

Thanks, reported on github (expo-image - blurhash placeholder and contentFit -> incorect blurhash size · Issue #21677 · expo/expo · GitHub)

FYI: There is a way to set blurhash width and height, setting placeholder as object with size specified instead of plain string blurhash.

Instead of:

const blurhash = 'UDA,w-}[W+tSxyoMM_R*005RjJadJ3X7-qxa';

you can declare an object:

const blurhash = { uri: 'UDA,w-}[W+tSxyoMM_R*005RjJadJ3X7-qxa', width: 20, height: 20 };
1 Like

I think blurhash makes more sense here than uri, though:

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.