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.
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.
INTRO REMARQUE:
- 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?
- 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.
- 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:
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.
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:
Après avoir exécuté le code, nous obtenons 4 nouveaux fichiers sous C:\Temp\Sortie ressemble à ceci:
4 image fusionnement horizontal
Note finale:
- 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 #.
- 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.
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());
}
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
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);
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;
}