Accidentalmente cambié la cámara a resolución reducida y varios cientos de fotografías se almacenaron de esta manera.
Hay RAW para estos, así que puedo volver a desarrollarlos a resolución completa. Desafortunadamente, si bien se conservan las orientaciones originales de la imagen, el recorte de JPEG en la cámara que he usado se descarta y los archivos JPEG de RAW siempre tienen una relación de sensor de 4:3 (o 3:4).
Para resumir:
¿Cuál es la herramienta/cadena recomendada para lograr eso? Gracias.
Desarrollé una solución en .NET Core que no voy a aceptar (todavía estoy esperando una mejor respuesta).
El problema con esta solución es que el recorte no tiene pérdidas (los archivos JPEG se vuelven a comprimir) e ImageSharp de alguna manera daña los metadatos de la imagen: la hora de la fecha tomada se muestra como 00:00 en XNView. JPEG de la cámara.
De lo contrario, hace lo que necesito.
Las imágenes se colocan en subcarpetas de una ruta:
/S - JPEG de la cámara con resolución reducida
/L - JPEG re-desarrollados a partir de RAW con resolución completa
/T - carpeta de destino para imágenes recortadas de resolución completa
using System;
using System.IO;
using System.Linq;
using ImageSharp;
using SixLabors.Primitives;
namespace fix
{
class Program
{
static void Main(string[] args)
{
var smalls = Directory.GetFiles("path/S").OrderBy(p => p);
var tPath = "path/T/";
foreach (var path in smalls)
{
using (FileStream sStream = File.OpenRead(path))
// change path to full resolution JPEGs from RAWs
using (FileStream lStream = File.OpenRead(path.Replace("/S/", "/L/")))
{
var small = Image.Load(sStream);
var large = Image.Load(lStream);
Rectangle rect = new Rectangle();
// image height of the reduced resolution image with in-camera cropping
// it's always height, the portrait (2:3) mode is only in EXIF
if (small.Height == 1360)
{
// crop rectangle on the full resolution image (see above)
rect = new Rectangle(0, 168, 4000, 2664);
}
// this file has been cropped
if (rect.Width != 0)
{
using (FileStream tStream = File.OpenWrite(string.Format("{0}{1}", tPath, Path.GetFileName(path))))
{
var encoder = new ImageSharp.Formats.JpegEncoder();
encoder.Quality = 98; // as desired
large.Crop(rect).Save(tStream, encoder);
}
}
}
}
}
}
}
Aankhen
usuario681768917
usuario681768917
Aankhen
usuario681768917
Aankhen