瀏覽代碼

converte-img

liyijie 2 年之前
父節點
當前提交
a1156f8b26

+ 108 - 2
PDF Office/Helper/ConverterHelper.cs

@@ -11,6 +11,8 @@ using static Dropbox.Api.Sharing.ListFileMembersIndividualResult;
 using ComPDFKit_Conversion.Options;
 using PDF_Office.CustomControl;
 using Exception = System.Exception;
+using ImageMagick;
+using System.IO.Compression;
 
 namespace PDF_Office.Helper
 {
@@ -166,7 +168,84 @@ namespace PDF_Office.Helper
             return result;
         }
 
-        public static async Task<bool> ImgConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists,string pawssword, ImgType type)
+        public static void ImageMagickPDFToImage(string imageType,string filePath,string outputFolder,string outputFileName) {
+            ZipFile.ExtractToDirectory(filePath, outputFolder + "\\" + outputFileName);
+            var files = Directory.GetFiles(outputFolder + "\\" + outputFileName, "*.png");
+            int i=0;
+            var images = new MagickImageCollection();
+            foreach (var file in files)
+            {
+
+                Trace.WriteLine(file);
+                if (imageType == ".gif") {
+                    images.Add(file);
+                    images[i].AnimationDelay = 100; // in this example delay is 1000ms/1sec
+                    images[i].Flip();
+                }
+                
+                using (var image = new MagickImage(file))
+                {
+                    if (imageType != ".gif")
+                    {
+                    //Save frame as jpg
+                    //image.Format = MagickFormat.Jp2;
+                    image.Write(file.Remove(file.LastIndexOf(".png"), 4) + imageType);
+                    }
+                    // 删除该文件
+                    System.IO.File.Delete(file);
+                }
+            }
+            if (imageType == ".gif")
+            {
+                // Optionally reduce colors
+                var settings = new QuantizeSettings();
+                settings.Colors = 256;
+                images.Quantize(settings);
+
+                // Optionally optimize the images (images should have the same size).
+                images.Optimize();
+
+                // Save gif
+                int fileIndex = 1;
+                if (File.Exists(outputFolder + "\\" + outputFileName + ".gif"))
+                {
+                    while (fileIndex >= 1)
+                    {
+                        if (!File.Exists(outputFolder + "\\" + outputFileName + "_" + fileIndex + ".gif"))
+                        {
+                            images.Write(outputFolder + "\\" + outputFileName + ".gif");
+                            fileIndex = -1;
+                        }
+                        fileIndex++;
+                    }
+                }
+                else { images.Write(outputFolder + "\\" + outputFileName + ".gif"); }
+               
+            }
+            else {
+                int fileIndex = 1;
+                
+                if (File.Exists(outputFolder + "\\" + outputFileName + ".zip"))
+                {
+                    while (fileIndex>=1) {
+                        if (!File.Exists(outputFolder + "\\" + outputFileName + "_" + fileIndex + ".zip"))
+                        {
+                            ZipFile.CreateFromDirectory(outputFolder + "\\" + outputFileName, outputFolder + "\\" + outputFileName + "_" + fileIndex + ".zip");
+                            fileIndex=-1;
+                        }
+                        fileIndex++;
+                    }
+                }
+                else { ZipFile.CreateFromDirectory(outputFolder + "\\" + outputFileName, outputFolder + "\\" + outputFileName + ".zip"); }
+                
+            }
+            DirectoryInfo di = new DirectoryInfo(outputFolder + "\\" + outputFileName);
+            di.Delete(true);
+
+
+        }       
+
+        public static async Task<bool> ImgConvert(string inputpath, string outputpath, OnProgress getProgress, List<int> pageIndexLists,string pawssword, ImgType type,string imageType=".png")
         {
             bool result = false;
             try
@@ -177,7 +256,34 @@ namespace PDF_Office.Helper
                 string outputFolder = outputpath;
                 string outputFileName = Path.GetFileNameWithoutExtension(inputpath);
                 ConvertError error = ConvertError.ERR_UNKNOWN;
-                result = await Task.Run(() => imgConverter.Convert(outputFolder, ref outputFileName, pageArray, type, ref error, getProgress));
+                if (imageType == ".png" || imageType == ".jpg")
+                {
+                    result = await Task.Run(() => imgConverter.Convert(outputFolder, ref outputFileName, pageArray, type, ref error, getProgress));
+                }
+                else
+                { //创建缓存文件夹
+                   
+                    string folderPath = Path.Combine(App.CurrentPath, "ConverterImg");
+                    //有可能因为其他原因存在同名文件,导致创建文件夹失败,需要先删除同名文件
+                    //保险措施(猜测)
+                    if (File.Exists(folderPath))
+                    {
+                        File.Delete(folderPath);
+                    }
+
+                    DirectoryInfo tempfolder = new DirectoryInfo(folderPath);
+                    if (!tempfolder.Exists)
+                    {
+                        tempfolder.Create();
+                    }
+
+                    //预览图缓存
+                    string saveName = Guid.NewGuid().ToString();
+                    string savePath = Path.Combine(folderPath, saveName);
+                     result = await Task.Run(() => imgConverter.Convert(folderPath, ref saveName, pageArray, type, ref error, getProgress));
+                    ImageMagickPDFToImage(imageType, saveName, outputFolder, outputFileName);
+                }
+                
                 if (result)
                 {
                     if (File.Exists(outputFileName))

+ 2 - 1
PDF Office/Model/Dialog/ConverterDialogs/ConverterImgDialogModel.cs

@@ -9,7 +9,8 @@ namespace PDF_Office.Model.Dialog.ConverterDialogs
 {
     public class ConverterImgDialogModel : ConverterDialogsModel
     {
-        public ImgType Type =ImgType.JPEG;
+        public ImgType Type =ImgType.PNG;
         public string DPI = "50";
+        public string imageType = ".jpeg";
     }
 }

+ 1 - 0
PDF Office/Model/Dialog/HomePageToolsDialogs/HomePageBatchProcessing/HomePageConverter/HomePageConverterImgModel.cs

@@ -10,6 +10,7 @@ namespace PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePageBatchProcessing.H
     public class HomePageConverterImgModel : HomePageConverterDialogModel
     {
         public ImgType Type = ImgType.JPEG;
+        public string imageType = ".jpeg";
         public string DPI = "50";
     }
 }

+ 1 - 0
PDF Office/PDF Office.csproj

@@ -171,6 +171,7 @@
     <Reference Include="System.Data" />
     <Reference Include="System.Deployment" />
     <Reference Include="System.Drawing" />
+    <Reference Include="System.IO.Compression.FileSystem" />
     <Reference Include="System.Management" />
     <Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
       <HintPath>packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath>

+ 24 - 9
PDF Office/ViewModels/Dialog/ConverterDialogs/ConverterImgDialogViewModel.cs

@@ -37,7 +37,7 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
 
         public string PageRangeSelectIndex { set; get; } = "0";
 
-        public List<string> ImageTypeFamily { set; get; } =new List<string>();
+        public List<string> ImageTypeFamily { set; get; } = new List<string>();
 
         private int imageTypeSelectedIndex;
         /// <summary>
@@ -50,7 +50,7 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
             set
             {
                 SetProperty(ref imageTypeSelectedIndex, value);
-                
+
                 UpdateImageType(ImageTypeSelectedIndex);
             }
         }
@@ -66,7 +66,7 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
             set
             {
                 SetProperty(ref imageDPISelectedIndex, value);
-                
+
                 UpdateImageDPI(ImageDPISelectedIndex);
             }
         }
@@ -121,20 +121,34 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
         /// <param name="index"></param>
         private void UpdateImageType(int index)
         {
+            this.ConverterImgModel.Type = ImgType.PNG;
             switch (index)
             {
                 //case结果是同样的情况下,case可堆叠在一起,表示处理方式一样
                 case 0:
-                case 1:
+                    this.ConverterImgModel.imageType = ".jpeg";
+                    break;
+                case 7:
+                    this.ConverterImgModel.imageType = ".jp2";
+                    break;
                 case 3:
+                    this.ConverterImgModel.imageType = ".gif";
+                    break;
                 case 4:
+                    this.ConverterImgModel.imageType = ".tiff";
+                    break;
                 case 5:
+                    this.ConverterImgModel.imageType = ".tga";
+                    break;
                 case 6:
-                case 7:
-                    this.ConverterImgModel.Type = ImgType.JPEG;
+                    this.ConverterImgModel.imageType = ".bmp";
                     break;
                 case 2:
-                    this.ConverterImgModel.Type = ImgType.PNG;
+                    this.ConverterImgModel.imageType = ".png";
+                    break;
+                case 1:
+                    this.ConverterImgModel.imageType = ".jpg";
+                    this.ConverterImgModel.Type = ImgType.JPEG;
                     break;
                 default:
                     break;
@@ -173,8 +187,9 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
             RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
         }
 
-        private  void converter()
+        private void converter()
         {
+
             FolderBrowserDialog dlg = new FolderBrowserDialog();
             if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
             {
@@ -189,7 +204,7 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                 MessageBoxEx.Show("输入不对");
                 return;
             }
-           
+
             DialogParameters value = new DialogParameters();
             value.Add(ParameterNames.ConverterType, "Img");
             value.Add(ParameterNames.ConverterTypeModel, ConverterImgModel);

+ 34 - 1
PDF Office/ViewModels/Dialog/ConverterDialogs/ConverterProgressBarDialogViewModel.cs

@@ -9,8 +9,10 @@ using Prism.Mvvm;
 using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
 using System.Net.Mime;
+using System.Windows.Media;
 using static Dropbox.Api.Sharing.ListFileMembersIndividualResult;
 
 namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
@@ -89,6 +91,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     if (ConverterCSVModel != null)
                     {
                         PageNumber = ConverterCSVModel.PageIndexLists.Count().ToString();
+                        for (int i = 0; ConverterCSVModel.PageIndexLists.Count > i; i++)
+                        {
+                            ConverterCSVModel.PageIndexLists[i] = ConverterCSVModel.PageIndexLists[i] + 1;
+                        }
                         result = await ConverterHelper.CSVConvert(ConverterCSVModel.InputPath, ConverterCSVModel.OutputPath, GetProgress, ConverterCSVModel.PageIndexLists, ConverterCSVModel.Pawssword);
                        
                     }
@@ -99,6 +105,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     if (ConverterExcelModel != null)
                     {
                         PageNumber = ConverterExcelModel.PageIndexLists.Count().ToString();
+                        for (int i = 0; ConverterExcelModel.PageIndexLists.Count > i; i++)
+                        {
+                            ConverterExcelModel.PageIndexLists[i] = ConverterExcelModel.PageIndexLists[i] + 1;
+                        }
                         result = await ConverterHelper.ExcelConvert(ConverterExcelModel.InputPath, ConverterExcelModel.OutputPath, GetProgress, ConverterExcelModel.PageIndexLists, ConverterExcelModel.Pawssword, ConverterExcelModel.excelOption);
                     }
                     break;
@@ -108,6 +118,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     if (ConverterHTMLModel != null)
                     {
                         PageNumber = ConverterHTMLModel.PageIndexLists.Count().ToString();
+                        for (int i = 0; ConverterHTMLModel.PageIndexLists.Count > i; i++)
+                        {
+                            ConverterHTMLModel.PageIndexLists[i] = ConverterHTMLModel.PageIndexLists[i] + 1;
+                        }
                         result = await ConverterHelper.HTMLConvert(ConverterHTMLModel.InputPath, ConverterHTMLModel.OutputPath, GetProgress, ConverterHTMLModel.PageIndexLists, ConverterHTMLModel.Pawssword, ConverterHTMLModel.htmlOption);
                     }
                     break;
@@ -117,7 +131,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     if (ConverterImgModel != null)
                     {
                         PageNumber = ConverterImgModel.PageIndexLists.Count().ToString();
-                        result = await ConverterHelper.ImgConvert(ConverterImgModel.InputPath, ConverterImgModel.OutputPath, GetProgress, ConverterImgModel.PageIndexLists, ConverterImgModel.Pawssword, ConverterImgModel.Type);
+                        for (int i=0; ConverterImgModel.PageIndexLists.Count>i;i++) {
+                            ConverterImgModel.PageIndexLists[i] = ConverterImgModel.PageIndexLists[i] + 1;
+                        }
+                        result = await ConverterHelper.ImgConvert(ConverterImgModel.InputPath, ConverterImgModel.OutputPath, GetProgress, ConverterImgModel.PageIndexLists, ConverterImgModel.Pawssword, ConverterImgModel.Type,ConverterImgModel.imageType);
                     }
                     break;
                 case "PPT":
@@ -126,6 +143,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     if (ConverterPPTModel != null)
                     {
                         PageNumber = ConverterPPTModel.PageIndexLists.Count().ToString();
+                        for (int i = 0; ConverterPPTModel.PageIndexLists.Count > i; i++)
+                        {
+                            ConverterPPTModel.PageIndexLists[i] = ConverterPPTModel.PageIndexLists[i] + 1;
+                        }
                         result = await ConverterHelper.PPTConvert(ConverterPPTModel.InputPath, ConverterPPTModel.OutputPath, GetProgress, ConverterPPTModel.PageIndexLists, ConverterPPTModel.Pawssword);
                     }
                     break;
@@ -135,6 +156,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     if (ConverterRTFModel != null)
                     {
                         PageNumber = ConverterRTFModel.PageIndexLists.Count().ToString();
+                        for (int i = 0; ConverterRTFModel.PageIndexLists.Count > i; i++)
+                        {
+                            ConverterRTFModel.PageIndexLists[i] = ConverterRTFModel.PageIndexLists[i] + 1;
+                        }
                         result = await ConverterHelper.RTFConvert(ConverterRTFModel.InputPath, ConverterRTFModel.OutputPath, GetProgress, ConverterRTFModel.PageIndexLists, ConverterRTFModel.Pawssword);
                     }
                         break;
@@ -144,6 +169,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     if (ConverterTextModel != null)
                     {
                         PageNumber = ConverterTextModel.PageIndexLists.Count().ToString();
+                        for (int i = 0; ConverterTextModel.PageIndexLists.Count > i; i++)
+                        {
+                            ConverterTextModel.PageIndexLists[i] = ConverterTextModel.PageIndexLists[i] + 1;
+                        }
                         result = await ConverterHelper.TxtConvert(ConverterTextModel.InputPath, ConverterTextModel.OutputPath, GetProgress, ConverterTextModel.PageIndexLists, ConverterTextModel.Pawssword);
                     }
                     break;
@@ -152,6 +181,10 @@ namespace PDF_Office.ViewModels.Dialog.ConverterDialogs
                     parameters.TryGetValue<ConverterWordDialogModel>(ParameterNames.ConverterTypeModel, out ConverterWordModel);
                     if (ConverterWordModel != null) {
                         PageNumber = ConverterWordModel.PageIndexLists.Count().ToString();
+                        for (int i = 0; ConverterWordModel.PageIndexLists.Count > i; i++)
+                        {
+                            ConverterWordModel.PageIndexLists[i] = ConverterWordModel.PageIndexLists[i] + 1;
+                        }
                         result = await ConverterHelper.WordConvert(ConverterWordModel.InputPath, ConverterWordModel.OutputPath, GetProgress, ConverterWordModel.PageIndexLists, ConverterWordModel.Pawssword);
                     }
                     break;

+ 1 - 1
PDF Office/ViewModels/Dialog/HomePageToolsDialogs/HomePageBatchProcessing/HomePageConverter/HomePageConverterDialogViewModel.cs

@@ -272,7 +272,7 @@ namespace PDF_Office.ViewModels.Dialog.HomePageToolsDialogs.HomePageBatchProcess
                         if (ConverterImgModel != null)
                         {
                             PageNumber = ConverterImgModel.PageIndexLists.Count().ToString();
-                            result = await ConverterHelper.ImgConvert(filename, OutputPath, GetProgress, PageIndexLists, ConverterImgModel.Pawssword, ConverterImgModel.Type);
+                            result = await ConverterHelper.ImgConvert(filename, OutputPath, GetProgress, PageIndexLists, ConverterImgModel.Pawssword, ConverterImgModel.Type, ConverterImgModel.imageType);
                         }
                         break;
                     default:

+ 39 - 1
PDF Office/ViewModels/Dialog/HomePageToolsDialogs/HomePageBatchProcessing/HomePageConverter/HomePageConverterImgViewModel.cs

@@ -1,4 +1,5 @@
-using PDF_Office.Model;
+using ComPDFKit_Conversion.Converter;
+using PDF_Office.Model;
 using Prism.Commands;
 using Prism.Mvvm;
 using Prism.Regions;
@@ -44,6 +45,43 @@ namespace PDF_Office.ViewModels.Dialog.HomePageToolsDialogs.HomePageBatchProcess
             SetImageTypeOrigin();
             SetImageDPIOrigin();
         }
+
+        public void UpdateImageType(int index)
+        {
+            this.homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.PNG;
+            switch (index)
+            {
+                //case结果是同样的情况下,case可堆叠在一起,表示处理方式一样
+                case 0:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".jpeg";
+                    break;
+                case 7:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".jp2";
+                    break;
+                case 3:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".gif";
+                    break;
+                case 4:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".tiff";
+                    break;
+                case 5:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".tga";
+                    break;
+                case 6:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".bmp";
+                    break;
+                case 2:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".png";
+                    break;
+                case 1:
+                    this.homePageConverterDialogViewModel.ConverterImgModel.imageType = ".jpg";
+                    this.homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
+                    break;
+                default:
+                    break;
+            }
+        }
+
         #region 构架行为
         public void OnNavigatedTo(NavigationContext navigationContext)
         {

+ 2 - 29
PDF Office/Views/Dialog/HomePageToolsDialogs/HomePageBatchProcessing/HomePageConverter/HomePageConverterImg.xaml.cs

@@ -19,35 +19,8 @@ namespace PDF_Office.Views.Dialog.HomePageToolsDialogs.HomePageBatchProcessing.H
         {
             if (((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel==null)
                 return;
-            switch (ImageTypeComboBox.SelectedIndex)
-            {
-                case 0:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
-                    break;
-                case 1:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
-                    break;
-                case 2:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.PNG;
-                    break;
-                case 3:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
-                    break;
-                case 4:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
-                    break;
-                case 5:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
-                    break;
-                case 6:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
-                    break;
-                case 7:
-                    ((HomePageConverterImgViewModel)this.DataContext).homePageConverterDialogViewModel.ConverterImgModel.Type = ImgType.JPEG;
-                    break;
-                default:
-                    break;
-            }
+
+            ((HomePageConverterImgViewModel)this.DataContext).UpdateImageType(ImageTypeComboBox.SelectedIndex);
         }
         private void ImageDPIComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
         {