web-dev-qa-db-fra.com

Convertir différents formats d'image (JPG, GIF, PNG, etc.) au format TIFF

Je travaille sur la lecture de texte d'une image à travers OCR. Il prend uniquement en charge les images de format TIFF.

Donc, j'ai besoin de convertir d'autres formats au format TIFF. Peut-il être fait? S'il vous plaît aider en fournissant des références.

18
user1509

Si vous créez un objet Image dans .NET, vous pouvez l'enregistrer en tant que TIFF. C'est l'un des choix multiples imageFormat à votre disposition.

Exemple:

var png = Image.FromFile("some.png");
png.Save("a.tiff", ImageFormat.Tiff);

Vous devrez inclure le System.Drawing Assemblée dans votre projet. Cette assemblée vous donnera beaucoup de capacités de manipulation d'image. J'espère que cela pourra aider.

22
Jacob

INTRO REMARQUE:

  1. Cette réponse couvre la question de la prime; qui est: comment convertons-nous plusieurs fichiers en 1 tiff? Par exemple, disons avoir des PDF, JPEG, PNGS, et j'aimerais créer 1 tiff hors d'eux?
  2. Dans cette réponse, j'utilise la mise en œuvre .NET de https://imagemagick.org/index.php pour la manipulation d'images et et Ghostscript pour aider à lire un fichier AI/EPS/PDF/PS afin que nous puissions le traduire. à l'image des fichiers à la fois crédibles et officielles.
  3. Après avoir répondu à cette question, j'ai eu une question supplémentaire dans mon courrier électronique demandant d'autres options de fusion, j'ai donc étendu ma réponse.

IMO Il y a 2 étapes à votre objectif:

  1. Installez les outils requis pour la conversion PDF
  2. Prenez toutes les images, y compris les fichiers formatés PDF à partir de la source et les fusionner dans un fichier TIFF.

1. Installez des outils qui aident PDF à la conversion d'image:

L'étape 1 n'est requise que si vous avez l'intention de convertir les formats de fichier AI/EPS/PD/PS/PS. Sinon, sautez à Step2.

Pour que cela puisse convertir le PDF en tout format d'image, nous avons besoin d'une bibliothèque pouvant lire des fichiers PDF et nous avons besoin d'un outil pour la convertir en caractères d'image. À cette fin, nous devrons installer Ghostscript (licence publique générale GNU Affirmer).

Ici, après quoi, nous devons installer ImageMagick.net pour .NET dans Visual Studio, Nuget link .

Jusqu'ici tout va bien.

2. PARTIE CODE

Deuxième et dernière étape est que nous devons lire des fichiers (PNG, JPG, BMP, PDF, etc.) à partir de l'emplacement du dossier et ajoutez chaque fichier à MagickImageCollection, puis nous avons plusieurs options pour fusionner l'utilisation AppendHorizontally, AppendVertically, Montage _ ou plusieurs pages TIFF. Imagemagick a des tonnes de fonctionnalités, telles que le redimensionnement, la résolution, etc., il s'agit d'un exemple de démontrage des fonctionnalités de fusion:

public static void MergeImage(string src, string dest, MergeType type = MergeType.MultiplePage)
{
    var files = new DirectoryInfo(src).GetFiles();

    using (var images = new MagickImageCollection())
    {
        foreach (var file in files)
        {
            var image = new MagickImage(file)
            {
                Format = MagickFormat.Tif,
                Depth = 8,
            };
            images.Add(image);
        }

        switch (type)
        {
            case MergeType.Vertical:
                using (var result = images.AppendVertically())
                {
                    result.AdaptiveResize(new MagickGeometry(){Height = 600, Width = 800});
                    result.Write(dest);
                }
                break;
            case MergeType.Horizontal:
                using (var result = images.AppendHorizontally())
                {
                    result.AdaptiveResize(new MagickGeometry(){Height = 600, Width = 800});
                    result.Write(dest);
                }
                break;
            case MergeType.Montage:
                var settings = new MontageSettings
                {
                    BackgroundColor = new MagickColor("#FFF"),
                    Geometry = new MagickGeometry("1x1<")
                };

                using (var result = images.Montage(settings))
                {
                    result.Write(dest);
                }
                break;
            case MergeType.MultiplePage:
                images.Write(dest);
                break;
            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, "Un-support choice");
        }

        images.Dispose();
    }
}

public enum MergeType
{
    MultiplePage,
    Vertical,
    Horizontal,
    Montage
}

Pour exécuter le code

public static void Main(string[] args)
{
    var src = @"C:\temp\Images";
    var dest1 = @"C:\temp\Output\MultiplePage.tiff";
    var dest2 = @"C:\temp\Output\Vertical.tiff";
    var dest3 = @"C:\temp\Output\Horizontal.tiff";
    var dest4 = @"C:\temp\Output\Montage.tiff";

    MergeImage(src, dest1);
    MergeImage(src, dest2, MergeType.Vertical);
    MergeImage(src, dest3, MergeType.Horizontal);
    MergeImage(src, dest4, MergeType.Montage);
}

Voici 4 fichiers d'entrée en C:\Temp\Images:

enter image description hereenter image description hereenter image description hereenter image description here

Après avoir exécuté le code, nous obtenons 4 nouveaux fichiers sous C:\Temp\Sortie ressemble à ceci:

enter image description here 4 page page multiple tiff

enter image description here 4 image fusion verticale

enter image description here 4 image fusionnement horizontal

enter image description here 4 image montage fusionnement

Note finale:

  1. il est possible de fusionner plusieurs images à TIFF à l'aide de System.Drawing; et utiliser System.Drawing.Maging; En utilisant ImageMagick, mais PDF nécessite une bibliothèque ou un outil de conversion tiers, donc j'utilise Ghostscript et ImageMagick pour C #.
  2. Imagemagick a de nombreuses fonctionnalités. Vous pouvez donc modifier la résolution, la taille du fichier de sortie, etc. C'est une bibliothèque bien reconnue.

Disclaimer: Une partie de cette réponse est tirée de mon site Web personnel https://itbackyard.com/how-to-convert-ai-eps-pdf-ps-aimage-file/ avec code source à Github.

12

Pour être secoué l'image au format TIF.Dans l'exemple ci-dessous pour convertir l'image et définir une zone de texte.Pour être voir l'image dans la zone de texte est (. Fi formate) .Ce code source fonctionne.

private void btn_Convert(object sender, EventArgs e)
    {
        string newName = System.IO.Path.GetFileNameWithoutExtension(CurrentFile);
        newName = newName + ".tif";
        try
        {
            img.Save(newName, ImageFormat.Tiff);
        }
        catch (Exception ex)
        {
            string error = ee.Message.ToString();
            MessageBox.Show(MessageBoxIcon.Error);

        }
        textBox2.Text = System.IO.Path.GetFullPath(newName.ToString());
    }
4
Bibin

La ligne de commande ImageMagick peut le faire facilement. Il est fourni sur la plupart des systèmes Linux et est également disponible pour Mac ou Windows. Voir https://imagemagick.org/script/download.php

convert image.suffix -compress XXX image.tiff


[.____] ou vous pouvez traiter tout un dossier de fichiers en utilisant

mogrify -format tiff -path path/to/output_directory *


Imagemagick prend en charge la combinaison de plusieurs images dans un TIFF multi-pages. Et les images peuvent être des types mixtes, même avec PDF.

convert image1.suffix1 image2.suffix2 ... -compress XXX imageN.suffixN output.tiff


[.____] Vous pouvez choisir parmi un certain nombre de formats de compression ou aucune compression.

Voir

https://imagemagick.org/script/command-line-processing.php

https://imagemagick.org/usage/basics/

https://imagemagick.org/usage/basics/#mogrie

https://imagemagick.org/script/command-line-option.php#Compresser


Ou vous pouvez utiliser Magick.Net pour une interface C #. Voir https://github.com/dlemstra/magick.net

La page principale imagemagick est à https://imagemagick.org .

Les formats pris en charge sont répertoriés à https://imagemagick.org/script/formats.php

Vous pouvez facilement traiter vos images pour les redimensionner, convertir en niveaux de gris, filtre (aiguille), seuil, etc., tout dans la même ligne de commande.

Voir

https://imagemagick.org/usage/

https://imagemagick.org/usage/reference.html

3
fmw42

Voici comment je convertit les images téléchargées sur un site Web. Modifiez-le afin qu'il génère des fichiers TIFF. La méthode saisie et génère un tableau d'octets afin qu'il puisse facilement être utilisé de différentes manières. Mais vous pouvez facilement le modifier.

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

public byte[] ConvertImageToTiff(byte[] SourceImage)
{
    //create a new byte array
    byte[] bin = new byte[0];

    //check if there is data
    if (SourceImage == null || SourceImage.Length == 0)
    {
        return bin;
    }

    //convert the byte array to a bitmap
    Bitmap NewImage;
    using (MemoryStream ms = new MemoryStream(SourceImage))
    {
        NewImage = new Bitmap(ms);
    }

    //set some properties
    Bitmap TempImage = new Bitmap(NewImage.Width, NewImage.Height);
    using (Graphics g = Graphics.FromImage(TempImage))
    {
        g.CompositingMode = CompositingMode.SourceCopy;
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.DrawImage(NewImage, 0, 0, NewImage.Width, NewImage.Height);
    }
    NewImage = TempImage;

    //save the image to a stream
    using (MemoryStream ms = new MemoryStream())
    {
        EncoderParameters encoderParameters = new EncoderParameters(1);
        encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 80L);

        NewImage.Save(ms, GetEncoderInfo("image/tiff"), encoderParameters);
        bin = ms.ToArray();
    }

    //cleanup
    NewImage.Dispose();
    TempImage.Dispose();

    //return data
    return bin;
}


//get the correct encoder info
public ImageCodecInfo GetEncoderInfo(string MimeType)
{
    ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
    for (int j = 0; j < encoders.Length; ++j)
    {
        if (encoders[j].MimeType.ToLower() == MimeType.ToLower())
            return encoders[j];
    }
    return null;
}

Tester

var oldImage = File.ReadAllBytes(Server.MapPath("OldImage.jpg"));
var newImage = ConvertImageToTiff(oldImage);
File.WriteAllBytes(Server.MapPath("NewImage.tiff"), newImage);
2
VDWWD

J'ai testé cela avec JPG, BMP, PNG et GIF. Fonctionne pour la création unique et multipage de tiffs. Passez-le un chemin complet dans le fichier. J'espère que cela aide quelqu'un. (extrait de MSDN)

public static string[] ConvertJpegToTiff(string[] fileNames, bool isMultipage)
    {
        EncoderParameters encoderParams = new EncoderParameters(1);
        ImageCodecInfo tiffCodecInfo = ImageCodecInfo.GetImageEncoders()
            .First(ie => ie.MimeType == "image/tiff");

        string[] tiffPaths = null;
        if (isMultipage)
        {
            tiffPaths = new string[1];
            System.Drawing.Image tiffImg = null;
            try
            {
                for (int i = 0; i < fileNames.Length; i++)
                {
                    if (i == 0)
                    {
                        tiffPaths[i] = String.Format("{0}\\{1}.tif",
                            Path.GetDirectoryName(fileNames[i]),
                            Path.GetFileNameWithoutExtension(fileNames[i]));

                        // Initialize the first frame of multipage tiff.
                        tiffImg = System.Drawing.Image.FromFile(fileNames[i]);
                        encoderParams.Param[0] = new EncoderParameter(
                            System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
                        tiffImg.Save(tiffPaths[i], tiffCodecInfo, encoderParams);
                    }
                    else
                    {
                        // Add additional frames.
                        encoderParams.Param[0] = new EncoderParameter(
                            System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
                        using (System.Drawing.Image frame = System.Drawing.Image.FromFile(fileNames[i]))
                        {
                            tiffImg.SaveAdd(frame, encoderParams);
                        }
                    }

                    if (i == fileNames.Length - 1)
                    {
                        // When it is the last frame, flush the resources and closing.
                        encoderParams.Param[0] = new EncoderParameter(
                            System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
                        tiffImg.SaveAdd(encoderParams);
                    }
                }
            }
            finally
            {
                if (tiffImg != null)
                {
                    tiffImg.Dispose();
                    tiffImg = null;
                }
            }
        }
        else
        {
            tiffPaths = new string[fileNames.Length];

            for (int i = 0; i < fileNames.Length; i++)
            {
                tiffPaths[i] = String.Format("{0}\\{1}.tif",
                    Path.GetDirectoryName(fileNames[i]),
                    Path.GetFileNameWithoutExtension(fileNames[i]));

                // Save as individual tiff files.
                using (System.Drawing.Image tiffImg = System.Drawing.Image.FromFile(fileNames[i]))
                {
                    tiffImg.Save(tiffPaths[i], ImageFormat.Tiff);
                }
            }
        }

        return tiffPaths;
    }
2
wbt11a