Как я могу сохранить PNG с текстом или блоком iTXt от Java?

Это как в React. Сначала вы должны получить данные (обычно componentDidMount() - хорошее место для этого. Вам нужно обновить состояние вашего компонента, чтобы оно содержало извлеченные данные. Вот пример использования axios, но тот же эффект может быть достигнут с помощью fetch. ] API.

class MyComponent extends Component {
    state = {
        data : []
    }

    componentDidMount(){
        axios.get('myendpoint')
              .then(res => this.setState({data : res}))
    }

    render(){
        const { data } = this.state

        return(
            <FlatList
                data={data}
                renderItem={({item}) => <Text>{item}</Text>}
            />
        )
    }

}

С fetch

class MyComponentWithFetch extends Component {
    state = {
        data : []
    }

    componentDidMount(){
        fetch('myendpoint')
            .then(docs => docs.json())
            .then(res => this.setState({data : res}))
    }

    render(){
        const { data } = this.state

        return(
            <FlatList
                data={data}
                renderItem={({item}) => <Text>{item}</Text>}
            />
        )
    }
}

пс: не забывайте ключи

11
задан Martin Cowie 6 April 2009 в 15:42
поделиться

2 ответа

Решение, на которое я ударил после некоторой декомпиляции, идет следующим образом...

RenderedImage image = getMyImage();         
Iterator<ImageWriter> iterator = ImageIO.getImageWritersBySuffix( "png" );

if(!iterator.hasNext()) throw new Error( "No image writer for PNG" );

ImageWriter imagewriter = iterator.next();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
imagewriter.setOutput( ImageIO.createImageOutputStream( bytes ) ); 

// Create & populate metadata
PNGMetadata metadata = new PNGMetadata();
// see http://www.w3.org/TR/PNG-Chunks.html#C.tEXt for standardized keywords
metadata.tEXt_keyword.add( "Title" );
metadata.tEXt_text.add( "Mandelbrot" );
metadata.tEXt_keyword.add( "Comment" );
metadata.tEXt_text.add( "..." );
metadata.tEXt_keyword.add( "MandelbrotCoords" ); // custom keyword
metadata.tEXt_text.add( fractal.getCoords().toString() );           

// Render the PNG to memory
IIOImage iioImage = new IIOImage( image, null, null );
iioImage.setMetadata( metadata ); // Attach the metadata
imagewriter.write( null, iioImage, null );
10
ответ дан 3 December 2019 в 09:42
поделиться

Попробуйте библиотеку Sixlegs Java PNG (http://sixlegs.com/software/png/). Это утверждает, что имело поддержку всех типов блока и делает частную обработку блока.

0
ответ дан 3 December 2019 в 09:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: