Comment modifier la résolution (DPI) d'une image?
j'ai une photo JPEG avec un DPI de 72. Je veux changer 72 dpi à 300 dpi.
Comment puis-je changer la résolution des images JPEG en utilisant C#?
5 réponses
Cet article parle de modifier le données EXIF sans la re-sauvegarde/re-compression (et donc perte d'information -- il utilise en fait un "truc"; il peut y avoir plus de bibliothèques directes) requis par le SetResolution
approche. Cela a été trouvé sur une recherche rapide de google, mais je voulais souligner que tous vous besoin à faire est de modifier la stockées les données EXIF.
Aussi: .NET lib pour EXIF modification et un autre DONC question. Google possède lorsque vous connaissez de bons termes de recherche.
Vous devez copier les bits sur une nouvelle image avec la résolution cible, comme ceci:
using (Bitmap bitmap = (Bitmap)Image.FromFile("file.jpg"))
{
using (Bitmap newBitmap = new Bitmap(bitmap))
{
newBitmap.SetResolution(300, 300);
newBitmap.Save("file300.jpg", ImageFormat.Jpeg);
}
}
il s'agit simplement d'augmenter la largeur et la hauteur de l'image par le bon rapport. Tous les formats d'images ne prennent pas en charge une métabalise DPI, et quand ils le font, tout ce qu'ils disent à votre logiciel graphique de faire est de diviser l'image par le rapport fourni.
par exemple, si vous exportez une image 300dpi de Photoshop vers un JPEG, l'image apparaîtra très grande lorsqu'elle sera vue dans votre logiciel de visualisation d'image. C'est parce que L'information DPI n'est pas prise en charge en JPEG et est rejetée lors de l'enregistrement. Cela signifie que votre téléspectateur d'image ne sait pas quel rapport diviser l'image par et affiche à la place l'image à un rapport de 1:1.
pour obtenir le ratio dont vous avez besoin pour mettre l'image à l'échelle, voir le code ci-dessous. Rappelez-vous, ce étirez l'image, comme dans Photoshop. Vous quadruplez la taille de l'image pour qu'elle s'étire et puisse produire des artefacts.
Pseudo code
ratio = 300.0 / 72.0 // 4.167
image.width * ratio
image.height * ratio
DPI ne doit pas être stocké dans un fichier image bitmap, car la plupart des sources de données pour bitmaps le rendent insignifiant.
une image bitmap est stockée en pixels. Les Pixels n'ont pas de taille inhérente. C'est seulement au moment du rendu - moniteur, imprimante, ou automatisé crossstitching machine - PPP de la matière.
une image bitmap de 800x1000 pixels, imprimée à 100 dpi, se transforme en une belle photo 8x10". Imprimé à 200 dpi, le EXACT SAME image bitmap tours dans une photo 4x5".
capturer une image avec un appareil photo numérique, et que signifie DPI? Ce n'est certainement pas la taille de la zone focalisée sur l'imageur CCD - cela dépend de la distance, et avec la NASA qui renvoie des images de galaxies de 100 000 années-lumière de large, et à 2 millions d'années-lumière d'écart, dans le même champ de vision, quel type de DPI obtenez-vous de informations?
ne tombez pas victime de L'idée du DPI d'une image bitmap - c'est un erreur. Une image bitmap n'a pas de dimensions physiques (à l'exception de quelques micromètres d'espace de stockage en mémoire vive ou disque dur). C'est seulement une image affichée, ou une image imprimée, qui a une taille physique en pouces, ou millimètres, ou furlongs.
ce code utilise merge et convert 200 dbi
static void Main(string[] args)
{ Path string Outputpath = @"C:\Users\MDASARATHAN\Desktop\TX_HARDIN_10-01-2016_K";
string[] TotalFiles = Directory.GetFiles(Outputpath, "*.tif", SearchOption.AllDirectories);
foreach (string filename in TotalFiles)
{
Bitmap bitmap = (Bitmap)Image.FromFile(filename);
string ExportFilename = string.Empty;
int Pagecount = 0;
bool bFirstImage = true;
bitmap.SetResolution(200, 200);
ExportFilename = Path.GetDirectoryName(filename) + "\" + Path.GetFileName(filename)+"f";
MemoryStream byteStream = new MemoryStream();
Pagecount = bitmap.GetFrameCount(FrameDimension.Page);
if (bFirstImage)
{
bitmap.Save(byteStream, ImageFormat.Tiff);
bFirstImage = false;
} Image tiff = Image.FromStream(byteStream);
ImageCodecInfo encoderInfo = ImageCodecInfo.GetImageEncoders().First(i => i.MimeType == "image/tiff");
EncoderParameters encoderParams = new EncoderParameters(2);
EncoderParameter parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
encoderParams.Param[0] = parameter;
parameter = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame);
encoderParams.Param[1] = parameter;
// bitmap.Dispose();
try
{
tiff.Save(ExportFilename, encoderInfo, encoderParams);
}
catch (Exception ex)
{
}
EncoderParameters EncoderParams = new EncoderParameters(2);
EncoderParameter SaveEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage);
EncoderParameter CompressionEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4);
EncoderParams.Param[0] = CompressionEncodeParam;
EncoderParams.Param[1] = SaveEncodeParam;
if (bFirstImage == false)
{
for (int i = 1; i < Pagecount; i++)
{
//bitmap = (Bitmap)Image.FromFile(filenames);
byteStream = new MemoryStream();
bitmap.SelectActiveFrame(FrameDimension.Page, i);
bitmap.Save(byteStream, ImageFormat.Tiff);
bitmap.SetResolution(200, 200);
tiff.SaveAdd(bitmap, EncoderParams);
}
} SaveEncodeParam = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush);
EncoderParams = new EncoderParameters(1);
EncoderParams.Param[0] = SaveEncodeParam;
tiff.SaveAdd(EncoderParams);
tiff.Dispose();
bitmap.Dispose();
File.Delete(filename);
}
}