Загрузка данных
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;
}
}
}
}
}