Sono in grado di convertire un TIFF a pagina singola in PNG in. Netto, tuttavia, come farei per un TIFF multipagina?Conversione multipagina da TIFF a PNG .Net
risposta
È necessario selezionare il frame attivo (pagina) in un ciclo e convertire ogni pagina tiff a un png.
int pageCount = 1;
try
{
pageCount = bmp.GetFrameCount(FrameDimension.Page);
}
catch (Exception)
{
// sometimes GDI+ throws internal exceptions.
// just ignore them.
}
for (int page = 0; page < pageCount; page++)
{
bmp.SelectActiveFrame(FrameDimension.Page, page);
// save or otherwise process tiff page
}
Questo codice presuppone che sia possibile caricare l'immagine Tiff nell'oggetto System.Drawing.Bitmap.
Imagemagick può fare praticamente qualsiasi cosa con le immagini, ma potrebbe richiedere del tempo per farlo correttamente a causa della grande quantità di opzioni tra cui scegliere. Puoi usare interop per lavorare direttamente con Imagemagick o puoi usare un wrapper .NET. Ho usato solo interop quindi non so quanto sia buono o cattivo lo wrapper.
I parametri che dovrete scoprire sul sito Web ImageMagick. Guarda la guida per il parametro della riga di comando e cerca il forum per tiff multipagina. Immagino tu voglia dividere il tiff in più pngs? Allora forse qualcosa di simile:
convertito MULTIPAGE.TIF singolo% d.png
Esempio completo senza la necessità di assemblee di partito 3'rd:
' MAIN CODE '
Dim ImageBitmap = Bitmap.FromStream(ImageStream)
Dim FrameCount = ImageBitmap.GetFrameCount(FrameDimension.Page)
Dim RunningHeight As Integer = 0
Dim MaxWidth As Integer = 0
For MeasurementFrameIndex As Integer = 0 To FrameCount - 1
ImageBitmap.SelectActiveFrame(FrameDimension.Page, MeasurementFrameIndex)
RunningHeight += ImageBitmap.Height
MaxWidth = Math.Max(MaxWidth, ImageBitmap.Width)
Next
Dim CombinedBitmap As New Bitmap(MaxWidth, RunningHeight)
Dim RunningVerticalPosition As Integer = 0
For CombinationFrameIndex As Integer = 0 To FrameCount - 1
ImageBitmap.SelectActiveFrame(FrameDimension.Page, CombinationFrameIndex)
EmbedBitmap(ImageBitmap, CombinedBitmap, RunningVerticalPosition)
RunningVerticalPosition += ImageBitmap.Height + 1
Next
' SUPPORT ROUTINES '
Private Shared Sub EmbedBitmap(
SourceBitmap As Bitmap,
ByRef DestinationBitmap As Bitmap,
VerticalPosition As Integer)
Dim SourceRectangle As New Rectangle(
New Point(0, 0),
New Size(SourceBitmap.Width, SourceBitmap.Height))
Dim DestinationRectangle As New Rectangle(
New Point(0, VerticalPosition),
New Size(SourceBitmap.Width, SourceBitmap.Height))
Using Canvas As Graphics = Graphics.FromImage(DestinationBitmap)
Canvas.DrawImage(
SourceBitmap,
DestinationRectangle,
SourceRectangle,
GraphicsUnit.Pixel)
End Using
End Sub
grazie @ Tom Halladay
vi fornirò una versione C# del codice
private static Bitmap ConvertTiffToBitmapStream(byte[] tiffImage){
System.Drawing.Image ImageBitmap = Bitmap.FromStream(new MemoryStream(tiffImage));
int FrameCount = ImageBitmap.GetFrameCount(FrameDimension.Page);
int RunningHeight = 0;
int MaxWidth = 0;
for (int MeasurementFrameIndex = 0; MeasurementFrameIndex <= FrameCount - 1; MeasurementFrameIndex++){
ImageBitmap.SelectActiveFrame(FrameDimension.Page, MeasurementFrameIndex);
RunningHeight += ImageBitmap.Height;
MaxWidth = Math.Max(MaxWidth, ImageBitmap.Width);
}
Bitmap CombinedBitmap = new Bitmap(MaxWidth, RunningHeight);
int RunningVerticalPosition = 0;
for (int CombinationFrameIndex = 0; CombinationFrameIndex <= FrameCount - 1; CombinationFrameIndex++){
ImageBitmap.SelectActiveFrame(FrameDimension.Page, CombinationFrameIndex);
EmbedBitmap(new Bitmap(ImageBitmap), ref CombinedBitmap, RunningVerticalPosition);
RunningVerticalPosition += ImageBitmap.Height + 1;
}
return CombinedBitmap;
}
private static void EmbedBitmap(Bitmap SourceBitmap, ref Bitmap DestinationBitmap, int VerticalPosition){
Rectangle SourceRectangle = new Rectangle(new Point(0, 0), new Size(SourceBitmap.Width, SourceBitmap.Height));
Rectangle DestinationRectangle = new Rectangle(new Point(0, VerticalPosition), new Size(SourceBitmap.Width, SourceBitmap.Height));
using (Graphics Canvas = Graphics.FromImage(DestinationBitmap)){
Canvas.DrawImage(SourceBitmap, DestinationRectangle, SourceRectangle, GraphicsUnit.Pixel);
}
}
- 1. Convertire molti PNG a TIFF multipagina
- 2. Qt multipagina TIFF
- 3. Strumenti per convertire PDF multipagina in multipagina TIFF
- 4. Divisione di Tiff multipagina in Tiff singolo su Windows 7/.Net 4.0
- 5. Conversione da ppm a png
- 6. Ghostscript PDF multipagina PDF a PNG
- 7. paperclip - conversione di immagini tiff in jpg o png
- 8. Utilizzo di convert o mogrify per unire più file PNG in un singolo file TIFF multipagina
- 9. Conversione da SVG a PNG in Ruby
- 10. Scaling automatico di TIFF multipagina NSImage in un CALayer
- 11. ImageMagick o GhostScript: converti un TIFF multipagina in un PDF multipagina
- 12. Divisione di un'immagine TIFF multipagina in singole immagini (Java)
- 13. Conversione da HBITMAP a Jpeg o Png in C++
- 14. convertito bitonale TIFF in bianco e nero PNG in C#
- 15. Colori errati durante la conversione dell'immagine TIFF in PNG in ImageMagick
- 16. Conversione di un'immagine TIFF in PNG/JPG/GIF in PHP senza Imagick
- 17. Conversione da 32 bit png a 8 bit png con ImageMagick preservando i pixel semitrasparenti
- 18. Conversione .NET DateTime a JSON
- 19. Come gestire le immagini multipagina in PythonMagick?
- 20. Conversione di PNG in JPEG
- 21. Conversione da app .NET a codice nativo x86
- 22. Conversione da DateTime a SqlDateTime per .NET Date
- 23. Annotazioni Tiff
- 24. conversione da emf a jpg
- 25. Split tiff multi-pagina con python
- 26. Libreria libera da PDF a TIFF in Windows?
- 27. da RGB a YCbCr Problemi di conversione
- 28. Conversione SVG creata con D3js in PNG
- 29. Come copiare un PNG da altri PNG?
- 30. Python: conversione di frame GIF in PNG