Manipulace s obrázky ve formátu JPEG
Použití třídy ExifData k čtení a úpravám EXIF značek ve formátu JPEG
Téměř všechny digitální fotoaparáty (včetně chytrých telefonů), skenery a další systémy pracující s obrazem ukládají obrázky s EXIF (Exchangeable Image File) informacemi. Fotoaparát do souboru obrazu zaznamenává nastavení fotoaparátu a informace o scéně. EXIF data zahrnují také čas závěrky, datum a čas pořízení fotografie, ohniskovou vzdálenost, kompenzaci expozice, vzorek metrující oblasti a informaci o použití blesku. API služby Aspose.Imaging umožňuje extrahovat EXIF informace z daného obrázku velmi snadným a jednoduchým způsobem. Vývojáři mohou také zapisovat EXIF data do obrázků nebo upravovat existující informace podle svých potřeb. Aspose.PSD poskytuje třídu ExifData pro čtení, zápis a úpravy EXIF dat, zatímco jmenný prostor Aspose.PSD.Exif.Enums obsahuje relevantní enumerace používané v procesu.
Čtení EXIF dat
Aspose.PSD API poskytuje prostředky pro čtení EXIF dat z daného obrázku. Níže uvedené kroky ilustrují použití třídy ExifData k čtení EXIF informací z obrázku.
- Načtěte obraz PSD pomocí tovární metody Load.
- Najděte miniaturu JPEG mezi zdroji PSD.
- Extrahujte instanci třídy ExifData.
Získejte požadované informace a zapište je do konzole.
Alternativně mohou vývojáři získat konkrétní informace pomocí následující části kódu.
Zápis a úpravy EXIF dat
Pomocí API Aspose.PSD mohou vývojáři zapisovat nové EXIF informace a upravovat existující EXIF data obrázku. Oba procesy (Zápis a Úprava) vyžadují načtení obrazu a získání EXIF dat do instance třídy ExifData. Poté můžete přistupovat k vlastnostem vystaveným třídou ExifData a nastavit je podle potřeby. Pamatujte, že obrázky pro úpravy by měly být v formátu Jpeg nebo Tiff, které jsou obvykle miniaturami PSD. Ukázkový kód pro demonstrování použití je následující:
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "sample.psd")) | |
{ | |
// Iterate over resources. | |
foreach (var resource in image.ImageResources) | |
{ | |
// Find thumbnail resource. Typically they are in the Jpeg file format. | |
if (resource is ThumbnailResource || resource is Thumbnail4Resource) | |
{ | |
// Extract exif data and print to the console. | |
var exif = ((ThumbnailResource)resource).JpegOptions.ExifData; | |
if (exif != null) | |
{ | |
// Set LensMake, WhiteBalance, Flash information Save the image | |
exif.LensMake = "Sony"; | |
exif.WhiteBalance = ExifWhiteBalance.Auto; | |
exif.Flash = ExifFlash.Fired; | |
} | |
} | |
} | |
image.Save(dataDir + "aspose_out.psd"); | |
} |
Extrakce miniatur z prostředků PSD
Miniatury jsou zmenšené verze obrázků, které slouží k zobrazení významné části obrázku namísto celého rámce. Některé obrazové soubory (zejména ty pořízené digitálními fotoaparáty) obsahují vložený miniatury obrázku v souboru. API Aspose.PSD vám umožňuje extrahovat miniatury prostředků PSD a uložit je samostatně na disk. Prostředky miniatur obsahují vlastnost ExifData.Thumbnail, která může získat data miniatury. Následující kódová ukázka demonstruje, jak ji používat.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "1280px-Zebras_Serengeti.psd")) | |
{ | |
// Iterate over resources. | |
foreach (var resource in image.ImageResources) | |
{ | |
// Find thumbnail resource. Typically they are in the Jpeg file format. | |
if (resource is ThumbnailResource || resource is Thumbnail4Resource) | |
{ | |
// Extract thumbnail data and store it as a separate image file. | |
var thumbnail = (ThumbnailResource)resource; | |
var data = ((ThumbnailResource)resource).ThumbnailArgb32Data; | |
using (PsdImage extractedThumnailImage = new PsdImage(thumbnail.Width, thumbnail.Height)) | |
{ | |
extractedThumnailImage.SaveArgb32Pixels(extractedThumnailImage.Bounds, data); | |
extractedThumnailImage.Save(dataDir + "extracted_thumbnail.jpg", new JpegOptions()); | |
} | |
} | |
} | |
} |
Použijte výše popsaný postup k uložení miniatury do jiných podporovaných formátů souborů. Pokud chcete exportovat data miniatury do jiných obrázkových formátů, jako jsou BMP a PNG, použijte jiné možnosti exportu obrázků.
Extrakce miniatur z segmentů JFIF
Je také možné extrahovat miniatury z JFIF segmentů nebo ExifData segmentů prostředků miniatur PSD. Následující kód ukazuje, jak provést extrakci dat miniatury z JFIF nebo ExifData segmentu:
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "1280px-Zebras_Serengeti.psd")) | |
{ | |
// Iterate over resources. | |
foreach (var resource in image.ImageResources) | |
{ | |
// Find thumbnail resource. Typically they are in the Jpeg file format. | |
if (resource is ThumbnailResource || resource is Thumbnail4Resource) | |
{ | |
// Extract thumbnail data and store it as a separate image file. | |
var thumbnail = (ThumbnailResource)resource; | |
var data = ((ThumbnailResource)resource).ThumbnailArgb32Data; | |
using (PsdImage extractedThumnailImage = new PsdImage(thumbnail.Width, thumbnail.Height)) | |
{ | |
extractedThumnailImage.SaveArgb32Pixels(extractedThumnailImage.Bounds, data); | |
extractedThumnailImage.Save(dataDir + "extracted_thumbnail.jpg", new JpegOptions()); | |
} | |
} | |
} | |
} |
Použijte výše popsaný postup k uložení miniatury do jiných podporovaných formátů souborů. Pokud chcete exportovat data miniatury do jiných obrázkových formátů, jako jsou BMP a PNG, použijte jiné možnosti exportu obrázků.
Přidání miniatury do segmentu JFIF
Následující kódová ukázka ukazuje, jak použít vlastnost JFIF.Thumbnail k přidání miniatury do segmentu JFIF načteného obrazu PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "aspose_out.psd")) | |
{ | |
// Iterate over resources. | |
foreach (var resource in image.ImageResources) | |
{ | |
// Find thumbnail resource. Typically they are in the Jpeg file format. | |
if (resource is ThumbnailResource || resource is Thumbnail4Resource) | |
{ | |
// Adjust thumbnail data. | |
var thumbnail = (ThumbnailResource)resource; | |
var jfifData = new FileFormats.Jpeg.JFIFData(); | |
var thumbnailImage = new PsdImage(100, 100); | |
try | |
{ | |
// Fill thumbnail data. | |
int[] pixels = new int[thumbnailImage.Width * thumbnailImage.Height]; | |
for (int i = 0; i < pixels.Length; i++) | |
{ | |
pixels[i] = i; | |
} | |
// Assign thumbnail data. | |
thumbnailImage.SaveArgb32Pixels(thumbnailImage.Bounds, pixels); | |
jfifData.Thumbnail = thumbnailImage; | |
jfifData.XDensity = 1; | |
jfifData.YDensity = 1; | |
thumbnail.JpegOptions.Jfif = jfifData; | |
} | |
catch | |
{ | |
thumbnailImage.Dispose(); | |
throw; | |
} | |
} | |
} | |
image.Save(); | |
} |
Obrázky miniatur s jinými daty segmentu nesmí obsahovat více než 65 545 bytů kvůli specifikacím formátu JPEG. V případě, že budou odeslány velké obrázky jako miniatury, může nastat výjimka.
Přidání miniatury do segmentu EXIF
Následující kódová ukázka ukazuje, jak použít vlastnost ExifData.Thumbnail k přidání miniatury do segmentu EXIF načteného obrazu PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "aspose_out.psd")) | |
{ | |
// Iterate over resources. | |
foreach (var resource in image.ImageResources) | |
{ | |
// Find thumbnail resource. Typically they are in the Jpeg file format. | |
if (resource is ThumbnailResource || resource is Thumbnail4Resource) | |
{ | |
// Adjust thumbnail data. | |
var thumbnail = (ThumbnailResource)resource; | |
var exifData = new JpegExifData(); | |
var thumbnailImage = new PsdImage(100, 100); | |
try | |
{ | |
// Fill thumbnail data. | |
int[] pixels = new int[thumbnailImage.Width * thumbnailImage.Height]; | |
for (int i = 0; i < pixels.Length; i++) | |
{ | |
pixels[i] = i; | |
} | |
// Assign thumbnail data. | |
thumbnailImage.SaveArgb32Pixels(thumbnailImage.Bounds, pixels); | |
exifData.Thumbnail = thumbnailImage; | |
thumbnail.JpegOptions.ExifData = exifData; | |
} | |
catch | |
{ | |
thumbnailImage.Dispose(); | |
throw; | |
} | |
} | |
} | |
image.Save(); | |
} |
V tomto případě API Aspose.PSD nemůže odhadnout velikost miniatury, ale může zkontrolovat velikost celého segmentu EXIF dat. Tato velikost nemůže být větší než 65 535 bytů.
Použití třídy JpegExifData k čtení a úpravám EXIF značek ve formátech Jpeg
API Aspose.PSD poskytuje tříduJpegExifData, která je výlučná pro formáty obrázků Jpeg k získání a aktualizaci EXIF informací. Tento článek demonstruje použití třídy JpegExifData k dosažení toho samého. Třída Aspose.PSD.Exif.JpegExifData slouží jako kontejner EXIF dat pro obrázky Jpeg a poskytuje prostředky k získání standardních EXIF značek Jpeg, jak je ukázáno níže:
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "aspose_out.psd")) | |
{ | |
// Iterate over resources. | |
foreach (var resource in image.ImageResources) | |
{ | |
// Find thumbnail resource. Typically they are in the Jpeg file format. | |
if (resource is ThumbnailResource || resource is Thumbnail4Resource) | |
{ | |
// Adjust thumbnail data. | |
var thumbnail = (ThumbnailResource)resource; | |
var exifData = new JpegExifData(); | |
var thumbnailImage = new PsdImage(100, 100); | |
try | |
{ | |
// Fill thumbnail data. | |
int[] pixels = new int[thumbnailImage.Width * thumbnailImage.Height]; | |
for (int i = 0; i < pixels.Length; i++) | |
{ | |
pixels[i] = i; | |
} | |
// Assign thumbnail data. | |
thumbnailImage.SaveArgb32Pixels(thumbnailImage.Bounds, pixels); | |
exifData.Thumbnail = thumbnailImage; | |
thumbnail.JpegOptions.ExifData = exifData; | |
} | |
catch | |
{ | |
thumbnailImage.Dispose(); | |
throw; | |
} | |
} | |
} | |
image.Save(); | |
} |
Kompletní seznam EXIF značek
Výše uvedená část kódu čte několik EXIF značek pomocí vlastností nabízených třídou Aspose.PSD.Exif.JpegExifData. Kompletní seznam těchto vlastností je k dispozici zde. Následující kód přečte všechny EXIF značky pomocí třídy System.Reflection.PropertyInfo.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "1280px-Zebras_Serengeti.psd")) | |
{ | |
// Iterate over resources. | |
foreach (var resource in image.ImageResources) | |
{ | |
// Find thumbnail resource. Typically they are in the Jpeg file format. | |
if (resource is ThumbnailResource || resource is Thumbnail4Resource) | |
{ | |
// Extract thumbnail data and store it as a separate image file. | |
var thumbnail = (ThumbnailResource)resource; | |
var exifData = thumbnail.JpegOptions.ExifData; | |
if (exifData != null) | |
{ | |
Type type = exifData.GetType(); | |
PropertyInfo[] properties = type.GetProperties(); | |
foreach (PropertyInfo property in properties) | |
{ | |
Console.WriteLine(property.Name + ":" + property.GetValue(exifData, null)); | |
} | |
} | |
} | |
} | |
} |
Automatická korekce orientace obrázků ve formátu JPEG
Fotografie mohou být pořízeny fotoaparátem otočeným o 90°, 180°, 270° nebo žádným způsobem (normální orientace). Většina digitálních fotoaparátů ukládá informace o orientaci spolu s obrazovými daty jako EXIF značkami obrázků ve formátu JPEG. Tyto informace lze použít k automatickému otočení obrázků a k opravě orientace. API Aspose.PSD poskytuje metodu AutoRotate pro třídu JpegImage k automatické korekci orientace obrázků ve formátu JPEG. Zde je, jak můžete použít metodu AutoRotate s API Aspose.PSD pro .NET.
Podpora pro JPEG-LS s CMYK a YCCK
API Aspose.PSD pro .NET poskytuje podporu pro barevné modely CMYK a YCCK s formátem JPEG-LS. Následující část kódu demonstruje, jak tuto podporu pro JPEG-LS použít.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "PsdImage.psd")) | |
{ | |
JpegOptions options = new JpegOptions(); | |
//Just replace one line given below in examples to use YCCK instead of CMYK | |
//options.ColorType = JpegCompressionColorMode.Cmyk; | |
options.ColorType = JpegCompressionColorMode.Cmyk; | |
options.CompressionType = JpegCompressionMode.JpegLs; | |
// The default profiles will be used. | |
options.RgbColorProfile = null; | |
options.CmykColorProfile = null; | |
image.Save(dataDir + "output.jpg", options); | |
} | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "PsdImage.psd")) | |
{ | |
JpegOptions options = new JpegOptions(); | |
//Just replace one line given below in examples to use YCCK instead of CMYK | |
//options.ColorType = JpegCompressionColorMode.Cmyk; | |
options.ColorType = JpegCompressionColorMode.Cmyk; | |
options.CompressionType = JpegCompressionMode.Lossless; | |
// The default profiles will be used. | |
options.RgbColorProfile = null; | |
options.CmykColorProfile = null; | |
image.Save(dataDir + "output2.jpg", options); | |
} |
Podpora pro 2-7 bitů na vzorek v obrazech JPEG-LS
API Aspose.PSD pro .NET poskytuje podporu pro obrázky JPEG-LS s 2 až 7 bity na vzorek. Následující část kódu demonstruje, jak tuto podporu pro JPEG-LS použít.
Nastavení ColorType a CompressionType pro obrázky ve formátu JPEG
API Aspose.PSD pro .NET poskytuje podporu pro typ barvy a typ komprese a nastavuje je jako stupně šedi a postupný pro obrázky ve formátu JPEG. Následující část kódu demonstruje, jak tuto podporu použít.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load PSD image. | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "PsdImage.psd")) | |
{ | |
JpegOptions options = new JpegOptions(); | |
options.ColorType = JpegCompressionColorMode.Grayscale; | |
options.CompressionType = JpegCompressionMode.Progressive; | |
image.Save(dataDir + "ColorTypeAndCompressionType_output.jpg", options); | |
} |
Následující část kódu ukazuje, jak použít vlastnost ExifData.Thumbnail k přidání miniatury do segmentu EXIF načteného obrázku PSD.
V tomto případě API Aspose.PSD nemůže odhadnout velikost miniatury, ale může zkontrolovat velikost celého segmentu EXIF dat. Tato velikost nemůže být větší než 65 535 bytů.