void GenerateThumbnail(Ffmpeg ffmpeg, string localSourceFile, string localThumbnailFile, MovieMetadata mm) { ffmpeg.ExtractFrame(localSourceFile, localThumbnailFile, GetThumbnailSeconds(mm)); using (var wand = new MagickWand(localThumbnailFile)) { wand.GetLargestDimensionsKeepingAspectRatio(THUMB_WIDTH, THUMB_HEIGHT, out uint width, out uint height); wand.ScaleImage(width, height); // sharpen after potentially resizing // http://www.imagemagick.org/Usage/resize/#resize_unsharp wand.UnsharpMaskImage(0, 0.7, 0.7, 0.008); wand.WriteImage(localThumbnailFile, true); mm.ThumbHeight = (int)height; mm.ThumbWidth = (int)width; } }
void GenerateThumbSq(Ffmpeg ffmpeg, string localSourceFile, string localThumbSqFile, MovieMetadata mm) { ffmpeg.ExtractFrame(localSourceFile, localThumbSqFile, GetThumbnailSeconds(mm)); using (var wand = new MagickWand(localThumbSqFile)) { var width = (double)wand.ImageWidth; var height = (double)wand.ImageHeight; var aspect = width / height; if (aspect >= THUMB_SQ_ASPECT) { var newWidth = (width / height) * THUMB_SQ_HEIGHT; // scale image to final height wand.ScaleImage((uint)newWidth, THUMB_SQ_HEIGHT); // crop sides as needed wand.CropImage(THUMB_SQ_WIDTH, THUMB_SQ_HEIGHT, (int)(newWidth - THUMB_SQ_WIDTH) / 2, 0); } else { var newHeight = THUMB_SQ_WIDTH / (width / height); // scale image to final width wand.ScaleImage(THUMB_SQ_WIDTH, (uint)newHeight); // crop top and bottom as needed wand.CropImage(THUMB_SQ_WIDTH, THUMB_SQ_HEIGHT, 0, (int)(newHeight - THUMB_SQ_HEIGHT) / 2); } // sharpen after potentially resizing // http://www.imagemagick.org/Usage/resize/#resize_unsharp wand.UnsharpMaskImage(0, 0.7, 0.7, 0.008); wand.WriteImage(localThumbSqFile, true); mm.ThumbSqHeight = THUMB_SQ_HEIGHT; mm.ThumbSqWidth = THUMB_SQ_WIDTH; } }