コード例 #1
2
ファイル: Crop.cs プロジェクト: gogosub77/Kanae
        public async Task<ValidationResult> Execute(MediaInfo mediaInfo, Int32 x, Int32 y, Int32 width, Int32 height)
        {
            if (x < 0 || y < 0 || width <= 0 || height <= 0)
            {
                return new ValidationResult("サイズの指定が不正です。");
            }

            var mediaContent = await _mediaRepository.Get(mediaInfo);
            if (mediaContent == null)
            {
                return new ValidationResult("指定されたメディアが見つかりませんでした。");
            }

            var data = await mediaContent.GetContentAsync();
            var imageInfo = new MagickImageInfo(data);
            if (imageInfo.Width < (x + width) || imageInfo.Height < (y + height))
            {
                return new ValidationResult("指定されたサイズは画像のサイズを超えています。");
            }

            // リサイズするよ!
            using (var image = new MagickImage(data))
            {
                image.Crop(new MagickGeometry(x, y, width, height));
                image.Page = new MagickGeometry(0, 0, width, height);
                
                // そして更新
                await _mediaRepository.Update(mediaInfo, image.ToByteArray());
            }

            return ValidationResult.Success;
        }
コード例 #2
0
ファイル: ReadImage.cs プロジェクト: levesque/Magick.NET
    public static void ReadBasicImageInformation()
    {
      // Read from file
      MagickImageInfo info = new MagickImageInfo(SampleFiles.SnakewarePng);

      // Read from stream
      using (MemoryStream memStream = LoadMemoryStreamImage())
      {
        info = new MagickImageInfo(memStream);
      }

      // Read from byte array
      byte[] data = LoadImageBytes();
      info = new MagickImageInfo(data);

      info = new MagickImageInfo();
      info.Read(SampleFiles.SnakewarePng);
      using (MemoryStream memStream = LoadMemoryStreamImage())
      {
        info.Read(memStream);
      }
      info.Read(data);

      Console.WriteLine(info.Width);
      Console.WriteLine(info.Height);
      Console.WriteLine(info.ColorSpace);
      Console.WriteLine(info.Format);
      Console.WriteLine(info.ResolutionX);
      Console.WriteLine(info.ResolutionY);
    }
コード例 #3
0
ファイル: UploadMedia.cs プロジェクト: gogosub77/Kanae
        /// <summary>
        /// アップロードされたデータの検証を行います。
        /// </summary>
        /// <param name="userId">ユーザーのID</param>
        /// <param name="stream">画像データ</param>
        /// <param name="length">画像データの長さ</param>
        /// <returns></returns>
        public ValidationResult Validate(String userId, Stream stream, Int64 length)
        {
            if (length > 1024 * 1024 * 10)
            {
                return new ValidationResult("10MBを超える画像のアップロードは許可されていません");
            }

            // 画像の種類をとるよ
            var imageInfo = new MagickImageInfo(stream);
            var contentType = (imageInfo.Format == MagickFormat.Png)
                                    ? "image/png"
                                    : (imageInfo.Format == MagickFormat.Jpeg)
                                        ? "image/jpeg"
                                        : (imageInfo.Format == MagickFormat.Gif)
                                            ? "image/gif"
                                            : null;
            stream.Position = 0; // 巻き戻しておく

            if (String.IsNullOrWhiteSpace(contentType))
            {
                return new ValidationResult("アップロードできる画像はPNG/JPEG/GIF形式のみです");
            }
            if (imageInfo.Width >= 10000 || imageInfo.Height >= 10000 || imageInfo.Width * imageInfo.Height * 4 > (45 * 1024 * 1024))
            {
                return new ValidationResult("やめてくださいしんでしまいます^o^");
            }

            return ValidationResult.Success;
        }
コード例 #4
0
ファイル: ImageOptimizer.cs プロジェクト: dlemstra/Magick.NET
    private static MagickFormatInfo GetFormatInformation(FileInfo file)
    {
      MagickFormatInfo info = MagickNET.GetFormatInformation(file);
      if (info != null)
        return info;

      MagickImageInfo imageInfo = new MagickImageInfo(file);
      return MagickNET.GetFormatInformation(imageInfo.Format);
    }
コード例 #5
0
ファイル: SvgTests.cs プロジェクト: dlemstra/Magick.NET
    public void Test_Dimensions()
    {
      using (MagickImage image = new MagickImage())
      {
        MagickReadSettings settings = new MagickReadSettings();
        settings.Width = 100;

        image.Read(Files.Logos.MagickNETSVG, settings);

        Assert.AreEqual(100, image.Width);
        Assert.AreEqual(48, image.Height);

        settings.Width = null;
        settings.Height = 200;

        image.Read(Files.Logos.MagickNETSVG, settings);

        Assert.AreEqual(415, image.Width);
        Assert.AreEqual(200, image.Height);

        settings.Width = 300;
        settings.Height = 300;

        image.Read(Files.Logos.MagickNETSVG, settings);

        Assert.AreEqual(300, image.Width);
        Assert.AreEqual(144, image.Height);

        image.Ping(Files.Logos.MagickNETSVG, settings);

        Assert.AreEqual(300, image.Width);
        Assert.AreEqual(144, image.Height);

        using (FileStream fs = File.OpenRead(Files.Logos.MagickNETSVG))
        {
          fs.Seek(55, SeekOrigin.Begin);

          ExceptionAssert.Throws<MagickMissingDelegateErrorException>(() =>
          {
            new MagickImageInfo(fs, settings);
          });

          fs.Seek(55, SeekOrigin.Begin);

          settings.Format = MagickFormat.Svg;

          MagickImageInfo info = new MagickImageInfo(fs, settings);
          Assert.AreEqual(300, info.Width);
          Assert.AreEqual(144, info.Height);
        }
      }
    }
コード例 #6
0
        public static MagickReadSettings GetSettings(Stream stream)
        {
            var info = new MagickImageInfo(stream);

            var settings = new MagickReadSettings
            {
                Format     = info.Format,
                ColorSpace = info.ColorSpace,
                Height     = info.Height,
                Width      = info.Width,
            };

            stream.Position = 0;

            return(settings);
        }
コード例 #7
0
        public void Test_Read()
        {
            MagickImageInfo imageInfo = new MagickImageInfo();

            ExceptionAssert.Throws <ArgumentException>(delegate()
            {
                imageInfo.Read(new byte[0]);
            });

            ExceptionAssert.Throws <ArgumentNullException>(delegate()
            {
                imageInfo.Read((byte[])null);
            });

            ExceptionAssert.Throws <ArgumentNullException>(delegate()
            {
                imageInfo.Read((Stream)null);
            });

            ExceptionAssert.Throws <ArgumentNullException>(delegate()
            {
                imageInfo.Read((string)null);
            });

            ExceptionAssert.Throws <ArgumentException>(delegate()
            {
                imageInfo.Read(Files.Missing);
            });

            imageInfo.Read(File.ReadAllBytes(Files.SnakewarePNG));

            using (FileStream fs = File.OpenRead(Files.SnakewarePNG))
            {
                imageInfo.Read(fs);
            }

            imageInfo.Read(Files.ImageMagickJPG);

            Assert.AreEqual(ColorSpace.RGB, imageInfo.ColorSpace);
            Assert.AreEqual(MagickFormat.Jpeg, imageInfo.Format);
            Assert.AreEqual(123, imageInfo.Width);
            Assert.AreEqual(118, imageInfo.Height);
            Assert.AreEqual(72, imageInfo.ResolutionX);
            Assert.AreEqual(72, imageInfo.ResolutionY);
            Assert.AreEqual(Resolution.PixelsPerInch, imageInfo.ResolutionUnits);
        }
コード例 #8
0
                public void ShouldResultInSmallerFileWHenQualityIsSetTo40()
                {
                    using (var tempFile = new TemporaryFile(Files.ImageMagickJPG))
                    {
                        var optimizer = new JpegOptimizer();
                        optimizer.Compress(tempFile.FileInfo);

                        var info = new MagickImageInfo(tempFile.FileInfo);
                        Assert.Equal(85, info.Quality);

                        FileHelper.Copy(Files.ImageMagickJPG, tempFile.FullName);

                        optimizer.Compress(tempFile.FileInfo, 40);

                        info = new MagickImageInfo(tempFile.FileInfo);
                        Assert.Equal(40, info.Quality);
                    }
                }
コード例 #9
0
        public void Compress_WithQualitySetTo40_FileIsSmallerThanNormalCompression()
        {
            using (TemporaryFile tempFile = new TemporaryFile(Files.ImageMagickJPG))
            {
                JpegOptimizer optimizer = new JpegOptimizer();
                optimizer.Compress(tempFile);

                IMagickImageInfo info = new MagickImageInfo(tempFile);
                Assert.AreEqual(85, info.Quality);

                File.Copy(Files.ImageMagickJPG, tempFile.FullName, true);

                optimizer.Compress(tempFile, 40);

                info = new MagickImageInfo(tempFile);
                Assert.AreEqual(40, info.Quality);
            }
        }
コード例 #10
0
                public void ShouldResultInSmallerFileWHenQualityIsSetTo40()
                {
                    using (TemporaryFile tempFile = new TemporaryFile(Files.ImageMagickJPG))
                    {
                        JpegOptimizer optimizer = new JpegOptimizer();
                        optimizer.Compress(tempFile);

                        IMagickImageInfo info = new MagickImageInfo(tempFile);
                        Assert.AreEqual(85, info.Quality);

                        File.Copy(Files.ImageMagickJPG, tempFile.FullName, true);

                        optimizer.Compress(tempFile, 40);

                        info = new MagickImageInfo(tempFile);
                        Assert.AreEqual(40, info.Quality);
                    }
                }
コード例 #11
0
        public async Task <ImageProcessResult> GetImage(byte[] bytes, int width, int quality = 80, bool asProgressiveJpeg = false)
        {
            byte[] output;
            string mimeType = string.Empty;

            try
            {
                var info = new MagickImageInfo(bytes);

                switch (info.Format)
                {
                case MagickFormat.Svg:
                    output = bytes;
                    break;

                case MagickFormat.Gif:
                    output = ProcessGif(bytes, width, quality);
                    if (output.Length > bytes.Length)
                    {
                        output = bytes;
                    }
                    break;

                default:
                    var result = ProcessImage(bytes, width, quality, asProgressiveJpeg);
                    output   = result.Bytes;
                    mimeType = result.MimeType;
                    break;
                }
            }
            catch (MagickException)
            {
                return(new ImageProcessResult {
                    Bytes = bytes, IsImage = false, Size = bytes.Length
                });
            }

            var newImageInfo = new MagickImageInfo(output);
            var task         = Task.Run(() => new ImageProcessResult {
                Bytes = output, IsImage = true, Width = newImageInfo.Width, Height = newImageInfo.Height, Size = output.Length, MimeType = mimeType
            });

            return(await task);
        }
コード例 #12
0
        public MainForm()
        {
            InitializeComponent();

            // initializing variables
            info_before  = null;
            image_before = null;
            image_after  = null;

            // creating empty profile
            profile = new ConverterProfile();

            // initializing form values
            LoadProfileSettings();

            // other visual setup
            bOrderUp.Text   = ((char)0x2191).ToString();
            bOrderDown.Text = ((char)0x2193).ToString();
        }
コード例 #13
0
        public IActionResult ReadPhotoInfo()
        {
            var             filePath = hostingEnv.WebRootPath + $@"\Files\Pictures\Dishes\hongshaorou.JPG";
            MagickImageInfo info     = new MagickImageInfo(filePath);

            using (MagickImage image = new MagickImage(filePath))
            {
                ExifProfile profile = image.GetExifProfile();
                if (profile == null)
                {
                    Console.WriteLine("Image does not contain exif information.");
                }
                else
                {
                    // Write all values to the console
                    foreach (ExifValue value in profile.Values)
                    {
                        Console.WriteLine("{0}({1}): {2}", value.Tag, value.DataType, value.ToString());
                        string sstr = string.Format("{0}({1}): {2}", value.Tag, value.DataType, value.ToString());
                    }
                    //var filePathOutputThubnail = hostingEnv.WebRootPath + $@"\Files\Pictures\Dishes\outputimgThubnail.JPG";
                    //profile.CreateThumbnail().Write(filePathOutputThubnail);
                }

                //image.Scale(new Percentage(60));
                if (image.Width > 1080)
                {
                    var filePathOutput1080 = hostingEnv.WebRootPath + $@"\Files\Pictures\Dishes\outputimg1080.JPG";
                    var filePathOutput768  = hostingEnv.WebRootPath + $@"\Files\Pictures\Dishes\outputimg768.JPG";
                    //image.Scale(768, (image.Height / image.Height) * 768);
                    //image.Sample(768, (image.Height / image.Height) * 768);
                    //image.Resize(768, (image.Height / image.Height) * 768);

                    //image.Scale(1080, (image.Height / image.Height) * 1080);
                }

                var filePathOutput = hostingEnv.WebRootPath + $@"\Files\Pictures\Dishes\outputimgSample.JPG";

                image.Write(filePathOutput);
            }
            return(View());
        }
コード例 #14
0
        public IActionResult UploadFilesManagerValidation(Microsoft.AspNetCore.Http.IFormFile file)
        {
            string fileRoute    = "wwwroot/";
            var    fileMimeType = file.ContentType;

            string[] ImageMimeTypes = new string[] { "image/gif", "image/jpeg", "audio/mpeg", "image/png", "image/webp" };
            if (!ImageMimeTypes.Contains(fileMimeType.ToString()))
            {
                return(Json(new Exception("Invalid contentType. It must be Image")));
            }

            Func <string, string, bool> validationFunction = (filePath, mimeType) => {
                long size = new System.IO.FileInfo(filePath).Length;
                if (size > 10 * 1024 * 1024)
                {
                    return(false);
                }
                MagickImageInfo info = new MagickImageInfo(filePath);

                if (info.Width != info.Height)
                {
                    return(false);
                }

                return(true);
            };

            FroalaEditor.FileOptions options = new FroalaEditor.FileOptions
            {
                Fieldname  = "file",
                Validation = new FroalaEditor.FileValidation(validationFunction)
            };

            try
            {
                return(Json(FroalaEditor.Image.Upload(HttpContext, fileRoute, options)));
            }
            catch (Exception e)
            {
                return(Json(e));
            }
        }
コード例 #15
0
 private bool IsSupportedImage(string path)
 {
     try {
         // I don't know the difference between Jpg and Jpeg.
         // A lot of .jpg extention files are recognized as Jpeg.
         MagickFormat format = new MagickImageInfo(path).Format;
         if (format == MagickFormat.Jpg || format == MagickFormat.Jpeg || format == MagickFormat.Png || format == MagickFormat.Gif || format == MagickFormat.WebP)
         {
             return(true);
         }
         else
         {
             Console.WriteLine(format);
             return(false);
         }
     } catch {
         Console.WriteLine(path);
         return(false);
     }
 }
        public ActionResult UploadFilesManagerValidation()
        {
            string fileRoute    = "/Public/";
            var    fileMimeType = System.Web.HttpContext.Current.Request.Files.Get("myImage").ContentType;

            string[] ImageMimeTypes = new string[] { "image/gif", "image/jpeg", "audio/mpeg", "image/png", "image/webp" };
            if (!ImageMimeTypes.Contains(fileMimeType.ToString()))
            {
                return(Json(new Exception("Invalid contentType. It must be Image")));
            }
            Func <string, string, bool> validationFunction = (filePath, mimeType) => {
                MagickImageInfo info = new MagickImageInfo(filePath);

                if (info.Width != info.Height)
                {
                    return(false);
                }
                long size = new System.IO.FileInfo(filePath).Length;
                if (size > 10 * 1024 * 1024)
                {
                    return(false);
                }
                return(true);
            };

            FroalaEditor.FilesManagerOptions options = new FroalaEditor.FilesManagerOptions
            {
                Fieldname  = "myImage",
                Validation = new FroalaEditor.FilesManagerValidation(validationFunction)
            };

            try
            {
                return(Json(FroalaEditor.FilesManager.Upload(System.Web.HttpContext.Current, fileRoute, options)));
            }
            catch (Exception e)
            {
                return(Json(e));
            }
        }
コード例 #17
0
        public ActionResult SaveImage(int albumId)
        {
            try
            {
                var files = this.Request.Files;

                if (files != null && files.Count > 0)
                {
                    for (var i = 0; i < files.Count; i++)
                    {
                        var path = SaveFileToDisk(files[i]);

                        var name = Path.GetFileNameWithoutExtension(files[i].FileName);

                        var fileName = Path.GetFileName(path);

                        var photoThumbnail = ResizeImage(path, 400, 300, PhotoTypeEnum.Thumbnail);

                        var photoMedium = ResizeImage(path, 800, 1000, PhotoTypeEnum.Medium);

                        MagickImageInfo info = new MagickImageInfo(path);

                        var photoOriginal = CreatePhotoVersion(path, PhotoTypeEnum.Original, info.Width, info.Height);

                        var photoId = SaveFileToDatabase(albumId, name);

                        SavePhotoVersionToDatabase(photoId, photoThumbnail);

                        SavePhotoVersionToDatabase(photoId, photoMedium);

                        SavePhotoVersionToDatabase(photoId, photoOriginal);
                    }
                }
            }
            catch (Exception ex) { return(Json("Error While Saving. " + ex.Message)); }

            return(Index(albumId));
        }
コード例 #18
0
        public IActionResult UploadImageValidation()
        {
            Func <string, string, bool> validationFunction = (filePath, mimeType) => {
                var info = new MagickImageInfo(filePath);

                return(info.Width == info.Height);
            };

            var options = new FroalaEditor.ImageOptions
            {
                Fieldname  = "myImage",
                Validation = new FroalaEditor.ImageValidation(validationFunction)
            };

            try
            {
                return(Json(FroalaEditor.Image.Upload(HttpContext, _uploadPath, options)));
            }
            catch (Exception e)
            {
                return(Json(e));
            }
        }
コード例 #19
0
        private async Task <Result <ImageDto> > GetRawImageFromMongoDBAsync(string hostName, string id)
        {
            var mongoDBImageProvider = _serviceProvider.GetService <MongoDBImageProvider>();
            var imageResult          = await mongoDBImageProvider.GetImageAsync(hostName, id);

            if (!imageResult.Success)
            {
                return(Result.FromError <ImageDto>(imageResult.Message));
            }

            var imageBytes = imageResult.Data;
            var imageInfo  = new MagickImageInfo(imageBytes);
            var imageDto   = new ImageDto {
                FileName = id, Imagebytes = imageBytes
            };

            if (imageInfo.Format == MagickFormat.Gif || imageInfo.Format == MagickFormat.Gif87)
            {
                imageDto.Mime = "image/gif";
            }
            else
            {
                using (var magickImage = new MagickImage(imageBytes))
                {
                    if (magickImage.HasAlpha)
                    {
                        imageDto.Mime = "image/png";
                    }
                    else
                    {
                        imageDto.Mime = "image/jpeg";
                    }
                }
            }

            return(Result.FromData(imageDto));
        }
コード例 #20
0
        internal static Size?GetImageSize(string path)
        {
            var ori = GetOrientationFromExif(path);

            try
            {
                var info = new MagickImageInfo(path);

                if (ori == OrientationType.RightTop || ori == OrientationType.LeftBotom)
                {
                    return new Size {
                               Width = info.Height, Height = info.Width
                    }
                }
                ;
                return(new Size {
                    Width = info.Width, Height = info.Height
                });
            }
            catch (MagickException)
            {
                return(null);
            }
        }
コード例 #21
0
        private PhotoVersion ResizeImage(string fileName, int typeWidth, int typeHeight, PhotoTypeEnum type)
        {
            using (MagickImage image = new MagickImage(fileName)) //Nu stiu exact daca merge asa direct din HttpPostedFileBase
            {
                MagickImageInfo info = new MagickImageInfo(fileName);

                //fit in dimensiunile respective
                MagickGeometry size = new MagickGeometry(typeWidth, typeHeight);

                if (info.Width > info.Height)
                {
                    //image.Resize(0, typeHeight);

                    image.Resize(size);
                }
                else
                {
                    //image.Resize(typeWidth, 0);

                    image.Resize(size);
                }
                return(saveImageToDisk(image, type, fileName));
            }
        }
コード例 #22
0
        public void Test_Compress_Quality()
        {
            FileInfo tempFile = CreateTemporaryFile(Files.ImageMagickJPG);

            try
            {
                JpegOptimizer optimizer = new JpegOptimizer();
                optimizer.Compress(tempFile);

                IMagickImageInfo info = new MagickImageInfo(tempFile);
                Assert.AreEqual(85, info.Quality);

                File.Copy(Files.ImageMagickJPG, tempFile.FullName, true);

                optimizer.Compress(tempFile, 40);

                info = new MagickImageInfo(tempFile);
                Assert.AreEqual(40, info.Quality);
            }
            finally
            {
                tempFile.Delete();
            }
        }
コード例 #23
0
        public void CopyFiles(bool preview)
        {
            int counter = 0;
            try
            {
                _filenames.Clear();
                
                OnProgressChange("Copying files");
                
                foreach (FileItem fileItem in Files)
                {
                    OnProgressChange("Copying file " + fileItem.Name);
                    string source = preview ? fileItem.LargeThumb : fileItem.FileName;
                    
                    MagickImageInfo info = new MagickImageInfo();
                    info.Read(source);
                    string format = info.Format.ToString();

                    if (format == "Jpeg")
                    {
                        string randomFile = Path.Combine(_tempdir, "image_" + counter.ToString("0000") + ".jpg");
                        AutoExportPluginHelper.ExecuteTransformPlugins(fileItem, PluginSetting.AutoExportPluginConfig, source, randomFile);
                        _filenames.Add(randomFile);
                        counter++;
                    }

                    if (format == "Tiff")
                    {
                        string randomFile = Path.Combine(_tempdir, "image_" + counter.ToString("0000") + ".tif");
                        using (MagickImage image = new MagickImage(source))
                        {
                            image.Format = MagickFormat.Tiff;
                            image.Write(randomFile);
                        }
                        _filenames.Add(randomFile);
                        counter++;
                    }
                    if (format != "Jpeg" && format != "Tiff")
                    {
                        OnProgressChange(fileItem.Name + "has invalid format, will not be copied");
                    }                  

                    
                    if (_shouldStop)
                    {
                        OnActionDone();
                        return;
                    }
                }
            }
            catch (Exception exception)
            {
                OnProgressChange("Error copy files " + exception.Message);
                Log.Error("Error copy files ", exception);
                _shouldStop = true;
            }
        }
コード例 #24
0
        private void GetFileItemFormat()
        {
            foreach (FileItem fileItem in Files)
            {
                string source = fileItem.FileName;
                MagickImageInfo info = new MagickImageInfo();
                info.Read(source);
                string format = info.Format.ToString();
                string format2 = info.CompressionMethod.ToString();


                OnProgressChange(fileItem.Name + " format is:  " + format + "____" + format2);
            }
        }
コード例 #25
0
    public void Test_Read()
    {
      MagickImageInfo imageInfo = new MagickImageInfo();

      ExceptionAssert.Throws<ArgumentException>(delegate ()
      {
        imageInfo.Read(new byte[0]);
      });

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        imageInfo.Read((byte[])null);
      });

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        imageInfo.Read((FileInfo)null);
      });

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        imageInfo.Read((Stream)null);
      });

      ExceptionAssert.Throws<ArgumentNullException>(delegate ()
      {
        imageInfo.Read((string)null);
      });

      ExceptionAssert.Throws<ArgumentException>(delegate ()
      {
        imageInfo.Read(Files.Missing);
      });

      imageInfo.Read(File.ReadAllBytes(Files.SnakewarePNG));

      using (FileStream fs = File.OpenRead(Files.SnakewarePNG))
      {
        imageInfo.Read(fs);
      }

      imageInfo.Read(Files.ImageMagickJPG);

      Assert.AreEqual(ColorSpace.sRGB, imageInfo.ColorSpace);
      Assert.AreEqual(MagickFormat.Jpeg, imageInfo.Format);
      Assert.AreEqual(123, imageInfo.Width);
      Assert.AreEqual(118, imageInfo.Height);
      Assert.AreEqual(72, imageInfo.ResolutionX);
      Assert.AreEqual(72, imageInfo.ResolutionY);
      Assert.AreEqual(Resolution.PixelsPerInch, imageInfo.ResolutionUnits);
    }
コード例 #26
0
        public void CopyFiles(bool preview)
        {
            int counter = 0;
            try
            {
                _filenames.Clear();

                OnProgressChange("Copying files");
                WriteLog("Copying files");
                WriteShortLog("Copying files");

                foreach (FileItem fileItem in Files)
                {
                    string source = preview ? fileItem.LargeThumb : fileItem.FileName;

                    MagickImageInfo info = new MagickImageInfo();
                    info.Read(source);
                    string format = info.Format.ToString();

                    OnProgressChange(fileItem.Name + " format is:  " + format);
                    WriteLog(fileItem.Name + " format is:  " + format);
                    WriteShortLog(fileItem.Name + " format is:  " + format);
                                       

                    if (format == "Jpeg")
                    {
                        OnProgressChange("Copying file " + fileItem.Name);
                        WriteLog("Copying file " + fileItem.Name);
                        WriteShortLog("Copying file " + fileItem.Name);
                        string randomFile = Path.Combine(ProjetFolder, "image_" + counter.ToString("0000") + ".jpg");
                        AutoExportPluginHelper.ExecuteTransformPlugins(fileItem, PluginSetting.AutoExportPluginConfig, source, randomFile);
                        _filenames.Add(randomFile);
                        counter++;
                    }

                    if (format == "Tiff")
                    {
                        OnProgressChange("Converting file " + fileItem.Name);
                        WriteLog("Converting file " + fileItem.Name);
                        WriteShortLog("Converting file " + fileItem.Name);
                        string randomFile = Path.Combine(ProjetFolder, "image_" + counter.ToString("0000") + ".jpg");

                        try
                        {
                            using (MagickImage image = new MagickImage(source))
                            {
                                image.Format = MagickFormat.Jpeg;
                                image.Write(randomFile);
                            }
                            _filenames.Add(randomFile);
                            counter++;
                        }
                        catch (Exception exception)
                        {
                            Log.Error("Error converting Tiff file", exception);
                        }    
                    }

                    if (format == "Nef" || format == "Cr2" || format == "Crw")
                    {
                        OnProgressChange("Converting file " + fileItem.Name);
                        WriteLog("Converting file " + fileItem.Name);
                        WriteShortLog("Converting file " + fileItem.Name);
                        string randomFile = Path.Combine(ProjetFolder, "image_" + counter.ToString("0000") + ".jpg");

                        try
                        {
                            string dcraw_exe = Path.Combine(Settings.ApplicationFolder, "dcraw.exe");
                            if (File.Exists(dcraw_exe))
                            {
                                PhotoUtils.RunAndWait(dcraw_exe,
                                    string.Format(" -e -O \"{0}\" \"{1}\"", randomFile, source));
                                _filenames.Add(randomFile);
                                counter++;
                            }
                        }
                        catch (Exception exception)
                        {
                            Log.Error("Error converting Raw file", exception);
                        }
                    }

                    if (format != "Jpeg" && format != "Tiff" && format != "Nef" && format != "Cr2" && format != "Crw")
                    {
                        OnProgressChange(fileItem.Name + " has invalid format, will not be copied");
                        WriteLog(fileItem.Name + " has invalid format, will not be copied");
                        WriteShortLog(fileItem.Name + " has invalid format, will not be copied");
                    }


                    if (_shouldStop)
                    {
                        OnActionDone();
                        return;
                    }
                }
            }
            catch (Exception exception)
            {
                OnProgressChange("Error copy files " + exception.Message);
                WriteLog("Error copy files " + exception.Message);
                WriteShortLog("Error copy files " + exception.Message);
                Log.Error("Error copy files ", exception);
                _shouldStop = true;
            }
        }
コード例 #27
0
ファイル: UploadMedia.cs プロジェクト: gogosub77/Kanae
        /// <summary>
        /// アップロードを実行します。
        /// </summary>
        /// <param name="userId">ユーザーのID</param>
        /// <param name="stream">画像データ</param>
        /// <param name="length">画像データの長さ</param>
        /// <returns></returns>
        public async Task<MediaInfo> Execute(String userId, Stream stream, Int64 length)
        {
            // チェックしますよ
            //var result = Validate(userId, stream, length);
            //if (result != ValidationResult.Success)
            //{
            //    throw new InvalidOperationException(result.ErrorMessage);
            //}

            // 読み込みますよ
            var data = new Byte[length];
            stream.Position = 0; // 一応巻き戻しますよ
            stream.Read(data, 0, data.Length);

            // 画像の種類をとるよ
            var imageInfo = new MagickImageInfo(data);
            var contentType = (imageInfo.Format == MagickFormat.Png)
                                    ? "image/png"
                                    : (imageInfo.Format == MagickFormat.Jpeg)
                                        ? "image/jpeg"
                                        : (imageInfo.Format == MagickFormat.Gif)
                                            ? "image/gif"
                                            : null;

            var mediaInfo = new MediaInfo() { UserId = userId, ContentType = contentType, MediaId = Guid.NewGuid(), CreatedAt = DateTime.UtcNow };

            // 画像アップロードに失敗したときに情報だけは残るように(画像だけ上がってしまうのは絶対に防ぐ)
            await _uploadedInfoRepository.Create(mediaInfo);
            await _mediaRepository.Create(mediaInfo, data);

            return mediaInfo;
        }