public string GetImageUrl(ThumbnailQuality quality, int index = 0) { if (Date == null) { throw new Exception("插画日期为空时无法获取插画图片链接"); } //除了原图外所有图片默认后缀统一为jpg var ext = "jpg"; if (quality == ThumbnailQuality.Original) { if (Suffix == null) { throw new Exception("后缀为空时无法获取原图链接"); } ext = Suffix; } switch (quality) { case ThumbnailQuality.Original: return($"{ImageBaseUri}/img-original/img/{Date}/{Id}_p{index}.{ext}"); //original default: return($"{ImageBaseUri}/img-original/img/{Date}/{Id}_p{index}.{ext}"); } }
private Bitmap GetThumbnail(Video videoInfo, ThumbnailQuality quality = ThumbnailQuality.Standard) { Bitmap result = null; string url = GetThumbnailUrl(videoInfo, quality: quality); if (!String.IsNullOrWhiteSpace(url)) { try { using (WebClient webClient = new WebClient()) { using (Stream stream = webClient.OpenRead(url)) { result = new Bitmap(stream); stream.Close(); stream.Dispose(); } webClient.Dispose(); } } catch (Exception ex) { Logger.Log(EventID.DIYoutubeDownloader.Downloader.GetThumbnailException, ex); } } return(result); }
private string GetThumbnailUrl(Video videoInfo, ThumbnailQuality quality = ThumbnailQuality.Standard) { string url = null; if (videoInfo != null) { switch (quality) { case ThumbnailQuality.Low: url = videoInfo.Thumbnails.LowResUrl; break; case ThumbnailQuality.Standard: url = videoInfo.Thumbnails.StandardResUrl; break; case ThumbnailQuality.Medium: url = videoInfo.Thumbnails.MediumResUrl; break; case ThumbnailQuality.High: url = videoInfo.Thumbnails.HighResUrl; break; case ThumbnailQuality.Max: url = videoInfo.Thumbnails.MaxResUrl; break; default: url = videoInfo.Thumbnails.MediumResUrl; break; } } return(url); }
public static string Stringify(this ThumbnailQuality quality) { switch (quality) { case ThumbnailQuality.S128: return("128x128"); case ThumbnailQuality.S240: return("240mw"); case ThumbnailQuality.S360: return("360x360"); case ThumbnailQuality.S480: return("480mw"); case ThumbnailQuality.Mini: return("mini"); case ThumbnailQuality.Original: return("original"); case ThumbnailQuality.Regular: return("regular"); case ThumbnailQuality.Small: return("small"); case ThumbnailQuality.Thumbnail: return("thumb"); //Regular default: return("regular"); } }
public static int Value(this ThumbnailQuality thumbnailQuality) { return(thumbnailQuality switch { ThumbnailQuality.Low => 70, ThumbnailQuality.Medium => 150, ThumbnailQuality.High => 300, _ => throw new ArgumentOutOfRangeException(nameof(thumbnailQuality), "This state of ThumbnailQuality is not valid.") });
private int TranslateQualitySetting(ThumbnailQuality quality) { switch (quality) { case ThumbnailQuality.Normal: return 200; case ThumbnailQuality.High: return 400; case ThumbnailQuality.Full: return 0; default: throw new ArgumentException(); } }
private void UpdateThumbnails(ThumbnailQuality quality) { var ctx = SynchronizationContext.Current; var canceller = new CancellationTokenSource(); if (_cancelThumbnailsUpdate != null) { _cancelThumbnailsUpdate.Cancel(); } _cancelThumbnailsUpdate = canceller; Task.Factory.StartNew(() => { if (_imageItems.Count == 0) { return; } Parallel.ForEach(Partitioner.Create(0, _imageItems.Count), (range, loopState) => { bool isCancelled = false; for (int i = range.Item1; i < range.Item2; i++) { var currentItem = _imageItems[i]; var tb = _thumbnailer.GetThumbnail(currentItem.FullName, quality); ctx.Post(new SendOrPostCallback((state) => currentItem.Thumbnail = tb), null); if (canceller.IsCancellationRequested) { isCancelled = true; break; } } if (isCancelled) { loopState.Stop(); } }); canceller.Dispose(); if (_cancelThumbnailsUpdate == canceller) { _cancelThumbnailsUpdate = null; } }, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
public System.Windows.Media.ImageSource GetThumbnail(string imagePath, ThumbnailQuality quality) { IShellItem shItem; Guid iIdIShellItem = new Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe"); var hr = SHCreateItemFromParsingName(imagePath, IntPtr.Zero, iIdIShellItem, out shItem); if (hr == 0) { Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046"); Guid CLSID_LocalThumbnailCache = new Guid("50EF4544-AC9F-4A8E-B21B-8A26180DB13F"); var type = Type.GetTypeFromCLSID(CLSID_LocalThumbnailCache); var tbCache = (IThumbnailCache)Activator.CreateInstance(type); ISharedBitmap bmp = null; WTS_CACHEFLAGS cFlags; WTS_THUMBNAILID bmpId; uint qualitySetting; switch (quality) { case ThumbnailQuality.Normal: qualitySetting = 96; break; case ThumbnailQuality.High: case ThumbnailQuality.Full: qualitySetting = 128; break; default: qualitySetting = 96; break; } hr = (int)tbCache.GetThumbnail(shItem, qualitySetting, WTS_FLAGS.WTS_EXTRACT, out bmp, out cFlags, out bmpId); if (hr == 0) { var bmpPtr = IntPtr.Zero; if (bmp.Detach(out bmpPtr) == 0) { try { var iSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( bmpPtr, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); DeleteObject(bmpPtr); iSrc.Freeze(); return iSrc; } finally { bmpPtr = IntPtr.Zero; Marshal.ReleaseComObject(bmp); Marshal.ReleaseComObject(shItem); bmp = null; shItem = null; } } else { Marshal.ReleaseComObject(bmp); Marshal.ReleaseComObject(shItem); return null; } } else { Marshal.ReleaseComObject(shItem); return null; } } return null; }
public MemoryStream GenerateThumbnailFromFirstPage(string xpsFilePath, XpsImageType imgType, ThumbnailQuality imgQuality = ThumbnailQuality.Medium) { if (LogHelper.CanDebug()) { LogHelper.Begin("XpsHelper.GenerateThumbnailFromFirstPage"); } try { BitmapEncoder bitmapEncoder = null; XpsDocument xpsDocument = new XpsDocument(xpsFilePath, FileAccess.Read); FixedDocumentSequence documentPageSequence = xpsDocument.GetFixedDocumentSequence(); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(xpsFilePath); string fileExtension = string.Empty; switch (imgType) { case XpsImageType.JpegImageType: bitmapEncoder = new JpegBitmapEncoder(); break; case XpsImageType.PngImageType: bitmapEncoder = new PngBitmapEncoder(); break; } double imageQualityRatio = 1.0 / (double)imgQuality; DocumentPage documentPage = documentPageSequence.DocumentPaginator.GetPage(0); RenderTargetBitmap targetBitmap = new RenderTargetBitmap((int)(documentPage.Size.Width * imageQualityRatio), (int)(documentPage.Size.Height * imageQualityRatio), 96.0 * imageQualityRatio, 96.0 * imageQualityRatio, PixelFormats.Pbgra32); targetBitmap.Render(documentPage.Visual); bitmapEncoder.Frames.Add(BitmapFrame.Create(targetBitmap)); MemoryStream memoryStream = new MemoryStream(); bitmapEncoder.Save(memoryStream); xpsDocument.Close(); return(memoryStream); } catch (Exception err) { LogHelper.Manage("XpsHelper.GenerateThumbnailFromFirstPage", err); } finally { LogHelper.End("XpsHelper.GenerateThumbnailFromFirstPage"); } return(null); }
public ImageSource GetThumbnail(string imagePath, ThumbnailQuality quality) { return GetThumbnailInternal(imagePath, TranslateQualitySetting(quality)); }
public Bitmap GetThumbnail(string mediaUrl, ThumbnailQuality quality = ThumbnailQuality.Standard) { return(this.GetThumbnail(this.GetVideoInfo(mediaUrl), quality: quality)); }
public void Assert_GetThumbnail_is_correct(ThumbnailQuality thumbnailQuality, string expected) { string thumbnailUrl = youtubeVideo.GetThumbnail(thumbnailQuality); Assert.AreEqual(thumbnailUrl, expected); }
public System.Windows.Media.ImageSource GetThumbnail(string imagePath, ThumbnailQuality quality) { IShellItem shItem; Guid iIdIShellItem = new Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe"); var hr = SHCreateItemFromParsingName(imagePath, IntPtr.Zero, iIdIShellItem, out shItem); if (hr == 0) { Guid IID_IUnknown = new Guid("00000000-0000-0000-C000-000000000046"); Guid CLSID_LocalThumbnailCache = new Guid("50EF4544-AC9F-4A8E-B21B-8A26180DB13F"); var type = Type.GetTypeFromCLSID(CLSID_LocalThumbnailCache); var tbCache = (IThumbnailCache)Activator.CreateInstance(type); ISharedBitmap bmp = null; WTS_CACHEFLAGS cFlags; WTS_THUMBNAILID bmpId; uint qualitySetting; switch (quality) { case ThumbnailQuality.Normal: qualitySetting = 96; break; case ThumbnailQuality.High: case ThumbnailQuality.Full: qualitySetting = 128; break; default: qualitySetting = 96; break; } hr = (int)tbCache.GetThumbnail(shItem, qualitySetting, WTS_FLAGS.WTS_EXTRACT, out bmp, out cFlags, out bmpId); if (hr == 0) { var bmpPtr = IntPtr.Zero; if (bmp.Detach(out bmpPtr) == 0) { try { var iSrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( bmpPtr, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); DeleteObject(bmpPtr); iSrc.Freeze(); return(iSrc); } finally { bmpPtr = IntPtr.Zero; Marshal.ReleaseComObject(bmp); Marshal.ReleaseComObject(shItem); bmp = null; shItem = null; } } else { Marshal.ReleaseComObject(bmp); Marshal.ReleaseComObject(shItem); return(null); } } else { Marshal.ReleaseComObject(shItem); return(null); } } return(null); }