/// <summary> /// 將圖片轉正 (透過手機上傳的圖片,有可能不是正的) /// </summary> public Stream CorrectOrientation(MemoryStream imageStream) { global::System.Drawing.Image image = global::System.Drawing.Image.FromStream(imageStream); if (image.PropertyIdList.Contains(0x0112)) { int rotation = image.GetPropertyItem(0x0112).Value[0]; switch (rotation) { case 1: // landscape, do nothing break; case 8: // rotated 90 right // de-rotate: image.RotateFlip(rotateFlipType: RotateFlipType.Rotate270FlipNone); break; case 3: // bottoms up image.RotateFlip(rotateFlipType: RotateFlipType.Rotate180FlipNone); break; case 6: // rotated 90 left image.RotateFlip(rotateFlipType: RotateFlipType.Rotate90FlipNone); break; } return(image.ToStream()); } return(imageStream); }
public static byte[] GetBytes(global::System.Drawing.Image image) { MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); return(stream.ToArray()); }
public static string GenerateBarCode(string id) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeScale = 4; // qrCodeEncoder.QRCodeVersion = 4; qrCodeEncoder.QRCodeVersion = 0; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; //System.Drawing.Image image = qrCodeEncoder.Encode("4408810820 深圳-广州 小江"); global::System.Drawing.Image image = qrCodeEncoder.Encode(id); string filename = Guid.NewGuid().ToString() + ".jpg"; string fileMonthPath = System.Web.HttpContext.Current.Server.MapPath(@"~\UploadFile") + "\\" + DateTime.Now.ToString("yyyyMM"); if (!System.IO.Directory.Exists(fileMonthPath)) { System.IO.Directory.CreateDirectory(fileMonthPath); } string filepath = fileMonthPath + "\\" + filename; global::System.IO.FileStream fs = new global::System.IO.FileStream(filepath, global::System.IO.FileMode.OpenOrCreate, global::System.IO.FileAccess.Write); image.Save(fs, global::System.Drawing.Imaging.ImageFormat.Jpeg); fs.Close(); image.Dispose(); return(@"../../UploadFile/" + DateTime.Now.ToString("yyyyMM") + "/" + filename); }
/// <summary> /// 直接將 System.Drawing.Image 轉為 Stream /// </summary> /// <param name="image"></param> /// <returns></returns> public static Stream ToStream(this global::System.Drawing.Image image) { var ms = new MemoryStream(); image.Save(ms, ImageFormat.Jpeg); ms.Position = 0; return(ms); }
/// <summary> /// Saves the encoded image to a file /// </summary> /// <param name="image">The image to save</param> /// <param name="quality">The quality desired (a value between 1 and 100).</param> /// <param name="format">The <see cref="T:System.Drawing.Imaging.ImageFormat" /> to save the image as.</param> /// <param name="fileName">The file path to save the image to.</param> public static void ToFile(global::System.Drawing.Image image, long quality, ImageFormat format, string fileName) { using (Stream stream = ToStream(image, quality, format)) { using (FileStream stream2 = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { stream.Position = 0L; byte[] buffer = new byte[stream.Length]; int count = stream.Read(buffer, 0, (int)stream.Length); stream2.Write(buffer, 0, count); stream2.Flush(); } } }
/// <summary> /// Saves the encoded image to a stream. /// </summary> /// <param name="image">The image to save</param> /// <param name="quality">The quality desired (a value between 1 and 100).</param> /// <param name="format">The <see cref="T:System.Drawing.Imaging.ImageFormat" /> to save the image as.</param> /// <returns></returns> public static Stream ToStream(global::System.Drawing.Image image, long quality, ImageFormat format) { MemoryStream stream = new MemoryStream(); ImageCodecInfo encoder = null; foreach (ImageCodecInfo info2 in ImageCodecInfo.GetImageEncoders()) { if (info2.MimeType == "image/jpeg") { encoder = info2; } } EncoderParameter parameter = new EncoderParameter(Encoder.Quality, quality); EncoderParameters encoderParams = new EncoderParameters(1); encoderParams.Param[0] = parameter; image.Save(stream, encoder, encoderParams); return(stream); }
/// <summary> /// Captures a screenshot of the window associated with the handle argument. /// </summary> /// <param name="handle">Used to determine which window to provide a screenshot for.</param> /// <returns>Screenshot of the window corresponding to the handle argument.</returns> public static global::System.Drawing.Image CaptureWindow(IntPtr handle) { IntPtr windowDC = NativeMethods.GetWindowDC(handle); IntPtr hDC = NativeMethods.CreateCompatibleDC(windowDC); NativeMethods.RECT rect = new NativeMethods.RECT(); NativeMethods.GetWindowRect(handle, ref rect); int nWidth = rect.right - rect.left; int nHeight = rect.bottom - rect.top; IntPtr hObject = NativeMethods.CreateCompatibleBitmap(windowDC, nWidth, nHeight); IntPtr ptr4 = NativeMethods.SelectObject(hDC, hObject); NativeMethods.BitBlt(hDC, 0, 0, nWidth, nHeight, windowDC, 0, 0, 0xcc0020); NativeMethods.SelectObject(hDC, ptr4); NativeMethods.DeleteDC(hDC); NativeMethods.ReleaseDC(handle, windowDC); global::System.Drawing.Image image = global::System.Drawing.Image.FromHbitmap(hObject); NativeMethods.DeleteObject(hObject); return(image); }
/// <summary> /// 判斷一個串流是哪種影像格式,可傳回 jpg, bmp, gif, png,若不是影像,則傳回空字串 /// </summary> /// <param name="strm"></param> /// <returns></returns> public static string GetImageFormat(this Stream strm) { // 讀取之前,先回到第一位元 strm.Position = 0; // 只讀取前面兩個位元組 byte[] buffer = new byte[2]; strm.Read(buffer, 0, 2); // 將兩 bytes 資料轉成易讀的 16 進位 string header = Convert.ToString(buffer[0], 16) + Convert.ToString(buffer[1], 16); // 第一次判斷圖檔格式 string format; switch (header.ToUpper()) { case "FFD8": format = "jpg"; break; case "424D": format = "bmp"; break; case "4749": format = "gif"; break; case "8950": format = "png"; break; default: format = ""; break; } // 先從最前面幾個位元組初步判斷格式後,為避免有些檔案是利用這個技巧刻意偽裝成圖檔,所以再進一步檢查 if (format != "") { global::System.Drawing.Image img = null; try { img = global::System.Drawing.Image.FromStream(strm); } catch (Exception) { // 會出錯代表它其實不是圖檔,而是有刻意偽裝過的 format = ""; } finally { if (img != null) { img.Dispose(); } img = null; } } return(format); }