'Does Material UI have an Image component?

I used other react components before, they mostly have their own Image component, but I can't find that in Material-UI?

Or is it done via CardMediaAPI? or simply use tags? Thanks!



Solution 1:[1]

Another option (at least in v5) is to use the Box component and select the underlying html element to be img as given in the example below (copied from official docs for v5)

     <Box
        component="img"
        sx={{
          height: 233,
          width: 350,
          maxHeight: { xs: 233, md: 167 },
          maxWidth: { xs: 350, md: 250 },
        }}
        alt="The house from the offer."
        src="https://images.unsplash.com/photo-1512917774080-9991f1c4c750?auto=format&w=350&dpr=2"
      />

Solution 2:[2]

There is no such specific custom img component avaiable with material-ui.

But you can use the simple html img component inside another wrapper components to create custom img component by your own. e.g

<Paper variant="outlined">
   <img src="url" />
</Paper>

Also <CardMedia/> component has to be used with in conjunction with <Card/> component. Another such component which uses image is <Avatar> component.

<Avatar alt="Example Alt" src="/static/images/avatar.jpg" />

Solution 3:[3]

Material-ui recommends using Material-ui-image, you have to install it separately but I have really enjoyed using it. After installing, as expected, it's simply:

import Image from "material-ui-image";
...
<Image src="image/src/" />

Solution 4:[4]

While I am answering this question, the latest version of MUI is 5.2.2 and there is no exact image component, but MUI had mentioned two third-party provided image components. One is mui-image and another one is material-ui-image. According to MUI, "mui-image is the only MUI image component to satisfy the Material guidelines for loading images" .

You can easily install mui-image by following few steps:

Install:

npm i mui-image
//or
yarn add mui-image

Import:

import Image from 'mui-image'
// or
import { Image } from 'mui-image'

Use:

<Image src="my-image.png" />

For details about mui-image props and more check npmjs package docs here.

Solution 5:[5]

You can use CardMedia from Material UI as below. Please see the section Complex Interaction in Material UI Example

<CardMedia
    className={classes.media}
    image="/static/images/cards/paella.jpg"
    title="Paella dish"
/>

Solution 6:[6]

Use the Avatar component

<Avatar variant={"rounded"} alt="The image" src={url} style={{
    width: 200,
    height: 200,
  }} />

Docs

Solution 7:[7]

Using mui's Box component is a good starting point. From there one can easily build its own reusable component without the need for another dependency. Try something like:

import {Box, BoxProps, } from "@mui/material";

type ImgProps = {
    alt: string;
    src: string;
    // add more HTML img attributes you need
}

export const Img = (props: BoxProps & ImgProps) => <Box component='img' {...props} />;

Solution 8:[8]

Use the CardMedia component

const [previewImage, setPreviewImage]=  useState<any>();

const { getRootProps, getInputProps } = useDropzone({
    accept: "image/*",
    onDrop: (acceptedFiles) => {
        setPreviewImage(URL.createObjectURL(acceptedFiles[0]));
    },
});

<CardMedia
   component="img"
   sx={{
   height: 233,
   width: 350,
   maxHeight: { xs: 233, md: 167 },
   maxWidth: { xs: 350, md: 250 },
   }}
   src={previewImage}
/>
                                

More details

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Peter Gerdes
Solution 2 WitVault
Solution 3 joshpetit
Solution 4
Solution 5 Khabir
Solution 6 panchicore
Solution 7 yN.
Solution 8 Ali-Alrabi