-2

我正在使用 PngCs dll 在 asp.net 中获取 Png 图像文件的块数据,我能够做到这一点,但现在我想更新该 PNG 的块数据。

我使用了 PngWriter,但它正在创建全新的文件而不继承块数据。

       PngReader pngr = FileHelper.CreatePngReader(path);
       pngr.GetMetadata().GetTxtForKey(PngChunkITXT.KEY_Title);
       Response.Write(pngr.GetMetadata().GetTxtForKey(PngChunkITXT.KEY_Title));

下面的代码用于通过 PngWriter 编写新的 Png 图像,我想在创建新文件时嵌入新的 itxt 块。

        PngReader pngr = FileHelper.CreatePngReader(origFilename); // or you can use the constructor
        PngWriter pngw = FileHelper.CreatePngWriter(destFilename, pngr.ImgInfo, true); // idem
        Console.WriteLine(pngr.ToString()); // just information
        int chunkBehav = ChunkCopyBehaviour.COPY_ALL_SAFE; // tell to copy all 'safe' chunks
        pngw.CopyChunksFirst(pngr, chunkBehav);          // copy some metadata from reader 

        for (int row = 0; row < pngr.ImgInfo.Rows; row++)
        {
            ImageLine l1 = pngr.ReadRowInt(row); // format: RGBRGB... or RGBARGBA...

            pngw.WriteRow(l1, row);
        }
        pngw.CopyChunksLast(pngr, chunkBehav); // metadata after the image pixels? can happen
        pngw.End(); // dont forget this
        pngr.End();

如需进一步参考,请单击此链接

4

2 回答 2

1

试试这个

       PngReader pngr = FileHelper.CreatePngReader(origFilename); 
       PngWriter pngw = FileHelper.CreatePngWriter(destFilename, pngr.ImgInfo, true);                                                     
       pngw.CopyChunksFirst(pngr, ChunkCopyBehaviour.COPY_ALL);
       pngw.GetMetadata().SetText(myKey, myText,false,false); // provide your own data  
       for (int row = 0; row < pngr.ImgInfo.Rows; row++)      {
            ImageLine l1 = pngr.ReadRowInt(row); 
            pngw.WriteRow(l1, row);
       }
       pngw.CopyChunksLast(pngr, ChunkCopyBehaviour.COPY_ALL);
       pngw.End(); // dont forget this
       pngr.End();
于 2013-06-28T21:01:46.197 回答
0

该问题已通过使用 CsXMpToolKit.dll 解决,这是从任何类型的文件中获取元数据的最佳选择。

于 2014-06-30T13:04:12.517 回答