public static bool extract_thumbnail(Guid?applicationId, DocFileInfo sourceFile, byte[] sourceContent, DocFileInfo destFile, int x, int y, int width, int height, int thumbnailWidth, int thumbnailHeight, ref string message, ref IconMeta meta) { try { if (sourceFile == null || sourceContent == null || sourceContent.Length == 0) { return(false); } destFile.Extension = "jpg"; if (!string.IsNullOrEmpty(sourceFile.Extension) && sourceFile.Extension != "jpg") { using (MemoryStream stream = new MemoryStream(sourceContent)) using (MemoryStream newSt = new MemoryStream()) using (Image img = Bitmap.FromStream(stream)) { img.Save(newSt, ImageFormat.Jpeg); img.Dispose(); //sourceFile.delete(applicationId); sourceFile.Extension = "jpg"; sourceContent = newSt.ToArray(); //sourceFile.store(applicationId, newSt.ToArray()); } } Image retImage = null; if (extract_thumbnail(applicationId, sourceFile, sourceContent, destFile, x, y, width, height, thumbnailWidth, thumbnailHeight, ref retImage, ref message, ref meta)) { using (MemoryStream st = new MemoryStream()) { retImage.Save(st, ImageFormat.Jpeg); retImage.Dispose(); destFile.store(applicationId, st.ToArray()); } } return(true); } catch { message = "{\"ErrorText\":\"" + Messages.OperationFailed.ToString() + "\"}"; return(false); } }
public static DocFileInfo decode_base64_file_content(Guid applicationId, Guid?ownerId, string base64FileContent, FileOwnerTypes ownerType) { if (string.IsNullOrEmpty(base64FileContent)) { return(null); } byte[] theData = null; try { theData = Convert.FromBase64String(base64FileContent); } catch { return(null); } int FIXED_HEADER = 16; DocFileInfo ret = new DocFileInfo() { FileID = Guid.NewGuid(), OwnerID = ownerId, OwnerType = ownerType, FolderName = FolderNames.TemporaryFiles }; try { using (MemoryStream ms = new MemoryStream(theData)) { using (BinaryReader theReader = new BinaryReader(ms)) { //Position the reader to get the file size. byte[] headerData = new byte[FIXED_HEADER]; headerData = theReader.ReadBytes(headerData.Length); ret.Size = (int)theReader.ReadUInt32(); int fileNameLength = (int)theReader.ReadUInt32() * 2; if (fileNameLength <= 0 || fileNameLength > 255) { throw new Exception("what the fuzz!!"); } byte[] fileNameBytes = theReader.ReadBytes(fileNameLength); //InfoPath uses UTF8 encoding. Encoding enc = Encoding.Unicode; string fullFileName = enc.GetString(fileNameBytes, 0, fileNameLength - 2); int dotIndex = fullFileName.LastIndexOf("."); if (dotIndex > 0 && dotIndex < (fullFileName.Length - 1)) { ret.Extension = fullFileName.Substring(dotIndex + 1); } ret.FileName = string.IsNullOrEmpty(ret.Extension) ? fullFileName : fullFileName.Substring(0, dotIndex); byte[] fileBytes = theReader.ReadBytes((int)ret.Size.Value); if (!ret.store(applicationId, fileBytes)) { return(null); } } } return(ret); } catch (Exception ex) { //maybe the file is a base64 image!! try { Image img = PublicMethods.image_from_byte_array(theData); if (img == null) { return(null); } byte[] imageBytes = PublicMethods.image_to_byte_array(img, System.Drawing.Imaging.ImageFormat.Jpeg); if (imageBytes == null || imageBytes.Length == 0) { return(null); } ret.Size = imageBytes.Length; ret.FileName = "img"; ret.Extension = "jpg"; if (!ret.store(applicationId, imageBytes)) { return(null); } return(ret); } catch { return(null); } } }
public static bool make_thumbnail(Guid?applicationId, byte[] sourceContent, DocFileInfo destFile, ref byte[] destContent, int width, int height, int minWidth, int minHeight, ref string errorMessage, string forceExtension = null, bool stretch = false, bool dontStore = false) { if (!string.IsNullOrEmpty(forceExtension)) { destFile.Extension = forceExtension; } if (sourceContent == null || sourceContent.Length == 0) { return(false); } Image retImage = null; try { using (MemoryStream stream = new MemoryStream(sourceContent)) using (Image img = Bitmap.FromStream(stream)) { bool result = make_thumbnail(img, width, height, minWidth, minHeight, ref retImage, ref errorMessage, stretch); if (img != null) { img.Dispose(); } if (!result) { if (retImage != null) { retImage.Dispose(); } if (img != null) { retImage.Dispose(); } return(false); } using (MemoryStream ms = new MemoryStream()) { retImage.Save(ms, ImageFormat.Jpeg); retImage.Dispose(); img.Dispose(); destContent = ms.ToArray(); if (!dontStore) { destFile.store(applicationId, destContent); } } return(true); } } catch (Exception ex) { return(false); } }