Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        public static byte[] GetBytes(global::System.Drawing.Image image)
        {
            MemoryStream stream = new MemoryStream();

            image.Save(stream, ImageFormat.Jpeg);
            return(stream.ToArray());
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
 /// <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();
         }
     }
 }
Ejemplo n.º 6
0
        /// <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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 8
0
        /// <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);
        }