Загрузка данных


using ImageMagick;
using FFMpegCore;
using Spire.Doc;
using Spire.Presentation;
using System.Diagnostics;

namespace UltraConvert
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            SetupExternalTools();
        }

        private void SetupExternalTools()
        {
            // Указываем Magick.NET искать Ghostscript (gsdll64.dll) в папке с программой
            string baseDir = AppDomain.CurrentDomain.BaseDirectory;
            MagickNET.SetGhostscriptDirectory(baseDir);

            // Указываем FFMpegCore искать ffmpeg.exe в папке с программой
            GlobalFFOptions.Configure(options => options.BinaryFolder = baseDir);
        }

        private async void btnConvert_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtFilePath.Text))
            {
                MessageBox.Show("Сначала выбери файл!");
                return;
            }

            string inputPath = txtFilePath.Text;
            string extension = Path.GetExtension(inputPath).ToLower();
            string outputFolder = Path.GetDirectoryName(inputPath) ?? "";
            
            btnConvert.Enabled = false;
            lblStatus.Text = "Обработка...";

            try
            {
                await Task.Run(() =>
                {
                    switch (extension)
                    {
                        // 1. ИЗОБРАЖЕНИЯ (AVIF, HEIC, WEBP -> JPEG) через Magick.NET
                        case ".avif":
                        case ".heic":
                        case ".webp":
                            ConvertToJpeg(inputPath, outputFolder);
                            break;

                        // 2. ДОКУМЕНТЫ (DOCX -> PDF) через Spire.Doc
                        case ".docx":
                        case ".doc":
                            ConvertDocToPdf(inputPath, outputFolder);
                            break;

                        // 3. ПРЕЗЕНТАЦИИ (PPTX -> PDF) через Spire.Presentation
                        case ".pptx":
                            ConvertPptxToPdf(inputPath, outputFolder);
                            break;

                        // 4. ВИДЕО (MP4 -> MP3) через FFMpegCore
                        case ".mp4":
                        case ".avi":
                            ConvertVideoToAudio(inputPath, outputFolder);
                            break;

                        default:
                            throw new Exception("Этот формат пока не поддерживается.");
                    }
                });

                lblStatus.Text = "Готово!";
                MessageBox.Show("Конвертация успешно завершена!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка: {ex.Message}", "Упс!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                lblStatus.Text = "Ошибка сборки.";
            }
            finally
            {
                btnConvert.Enabled = true;
            }
        }

        // --- МЕТОДЫ КОНВЕРТАЦИИ ---

        private void ConvertToJpeg(string input, string folder)
        {
            string output = Path.Combine(folder, Path.GetFileNameWithoutExtension(input) + ".jpg");
            using (var image = new MagickImage(input))
            {
                image.Format = MagickFormat.Jpeg;
                image.Quality = 90; // Хорошее качество без лишнего веса
                image.Write(output);
            }
        }

        private void ConvertDocToPdf(string input, string folder)
        {
            string output = Path.Combine(folder, Path.GetFileNameWithoutExtension(input) + ".pdf");
            Document doc = new Document();
            doc.LoadFromFile(input);
            doc.SaveToFile(output, Spire.Doc.FileFormat.PDF);
        }

        private void ConvertPptxToPdf(string input, string folder)
        {
            string output = Path.Combine(folder, Path.GetFileNameWithoutExtension(input) + ".pdf");
            Presentation ppt = new Presentation();
            ppt.LoadFromFile(input);
            ppt.SaveToFile(output, Spire.Presentation.FileFormat.PDF);
        }

        private void ConvertVideoToAudio(string input, string folder)
        {
            string output = Path.Combine(folder, Path.GetFileNameWithoutExtension(input) + ".mp3");
            FFMpeg.ExtractAudio(input, output);
        }

        // Кнопка выбора файла
        private void btnSelectFile_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog ofd = new OpenFileDialog())
            {
                ofd.Filter = "Все файлы|*.*|Изображения|*.avif;*.webp;*.heic|Документы|*.docx;*.pptx|Видео|*.mp4";
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    txtFilePath.Text = ofd.FileName;
                }
            }
        }
    }
}