protected void addImageMetaData(ref SolrSearchResults solr_results) { var ser = new JavaScriptSerializer(); //if (String.IsNullOrEmpty(base_uri) == false) // add in image metadata, not required for Solr indexing //{ foreach (IInqItem k in solr_results.Results) { if (k.GetType().IsSubclassOf(typeof(InqItemIIIFBase))) { // new logic here for IIIF images // k.ImageMetadata = new ImageMetadata { Identifier = file, Imagefile = file, Width = d[0], Height = d[1], DwtLevels = 0, Levels = 0, CompositingLayerCount = 0 }; } else { if (k.File != null) { if (!String.IsNullOrEmpty((ImageHelper.Jpeg2000NamespaceReplace)) && k.File.Contains(ImageHelper.Jpeg2000NamespaceReplace)) // see Jpeg2000NamespaceReplace for explanation { k.File = k.File.Replace(ImageHelper.Jpeg2000NamespaceReplace, ImageHelper.Jpeg2000Namespace); } if ((!JP2HelperBase.IsAudioOrVideo(k.File)) && (!String.IsNullOrEmpty(ImageHelper.ImageFilenameAppend))) { k.File = string.Format("{0}{1}", k.File, ImageHelper.ImageFilenameAppend); } if (k.File.Contains(ImageHelper.Jpeg2000Namespace)) // file is a jpeg2000 image { var md_str = _IJP2Helper.GetJpeg2000Metadata(k.File, false); md_str = md_str.Replace(@"\", @"\\"); var md = ser.Deserialize <ImageMetadata>(md_str); k.ImageMetadata = md; } else { var file = k.File; // most importantly we need the width and height of non-jpeg2000 images so can re-size them to thumbnails whilst retaining the aspect ratio var d = ImageHelper.GetImageDimensions(file); if ((file != null) && (file.Contains("'"))) // apostrophes in filenames, good at breaking JSON { file = file.Replace("'", @"\'"); } k.ImageMetadata = new ImageMetadata { Identifier = file, Imagefile = file, Width = d[0], Height = d[1], DwtLevels = 0, Levels = 0, CompositingLayerCount = 0 }; // k.ImageMetadata = ser.Deserialize<Jpeg2000Metadata>(String.Format("{{ 'identifier': '{0}', 'imagefile': '{0}', 'width': '{1}', 'height': '{2}', 'dwtLevels': '0', 'levels': '0', 'compositingLayerCount': '0' }}", file, d[0], d[1])); } } } } //} //else // throw new Exception("SolrRespository.addImageMetaData(): base_uri parameter empty"); // return r_list; }
public static int[] GetImageDimensions(string file) { try { if (JP2HelperBase.IsAudioOrVideo(file)) { file = Path.ChangeExtension(file, ".jpg"); // replace audio/video file extension with .jpg so thumbnail can be read for metadata } file = String.Format("{0}{1}", ImageDirectory, file); var bitmapFrame = BitmapFrame.Create(new Uri(file), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None); return(new[] { bitmapFrame.PixelWidth, bitmapFrame.PixelHeight }); } catch (Exception) { return(new[] { 0, 0 }); } }