Посмотрите в старт посте под спойлером про подключение using, проверьте все ли сделано, как там написано. те ли версии dll используете.Выдает такую ошибку, не подскажите что нужно делать? Вообще новичок в этой теме.Посмотреть вложение 112080
Да неправильно прописал , using . СпасибоПосмотрите в старт посте под спойлером про подключение using, проверьте все ли сделано, как там написано. те ли версии dll используете.
Вам не хватаетMagick.Native-Q16-HDRI-x64.dll (ну или х86)в ExternalAssembliesПодскажите в чем может быть проблема?
Выполнение действия CSharp OwnCode. Инициализатор типа "NativeMagickSettings" выдал исключение.
где она? глаза сломалВсем привет! Помогите разобраться.
Перешёл на сайт https://imagemagick-org.translate.goog/script/download.php?_x_tr_sl=en&_x_tr_tl=ru&_x_tr_hl=ru#windows
где скачивать библиотеку, файла с расширением dll я там не нашёл, там есть ImageMagick-7.1.1-29-Q8-x64-dll.exe
Скачал его, и установил. В установленной папке нет данной библиотеки Magick.NET-Q8-AnyCPU.dll и даже похожей нет.
Подскажите от куда её скачать?
***Нашёл)***
вот эти подключайтегде она? глаза сломал
Подскажите пожалуйста, как реализовать.
Есть у меня допустим картинка 750х750 пикселей.
Мне необходимо ровно в середину (примерно в размер 600х600 пикселей) написать текст. Текст может быть как 5 слов, так и несколько предложений. В зависимости от длины текста, чтобы менялся размер шрифта.
Заранее благодарю!
// Путь к исходному изображению
string imagePath = @"C:\\Program Files\\ZennoLab\\RU\\ZennoPoster Pro V7\\7.7.5.0\\Progs\\imageR.jpg";
// Создание объекта изображения
using (MagickImage image = new MagickImage(imagePath))
{
// Установка параметров текста
MagickReadSettings settings = new MagickReadSettings
{
TextGravity = Gravity.Center,
BackgroundColor = MagickColors.Transparent,
FillColor = MagickColors.Black,
Width = 600,
Height = 600
};
// Текст, который нужно добавить на изображение
string text = "Ваш текст здесь";
// Создание объекта для добавления текста
using (MagickImage textImage = new MagickImage($"caption:{text}", settings))
{
// Наложение текста на изображение в середину
image.Composite(textImage, (image.Width - textImage.Width) / 2, (image.Height - textImage.Height) / 2, CompositeOperator.Over);
}
// Сохранение измененного изображения
string outputImagePath = "image.jpg";
image.Write(outputImagePath);
}
https://github.com/dlemstra/Magick.NET лучше пользоваться последней версией, здесь уже устаревшая.
Это лучше в тему с поиском исполнителей написать, и конкретизировать какой функционал софта хотите и какой бюджет на разработку.Ребят, подскажите плз кто может на net фреймворке софт написать?
Подскажите пожалуйста как исправить ошибку чтоб уменьшить качество .webp & .jpeg изображения.JPG в WEBP
C#:string InputImagePath = project.Variables["InputImagePath"].Value; // В переменной InputImagePath указать путь к изображению .jpg string SaveImagePath = project.Variables["SaveImagePath"].Value; // В переменной SaveImagePath указать путь куда сохраняем обработанное изображение .webp int quality = 80; // желаемое качество от 1 до 100 using (MagickImage image = new MagickImage(InputImagePath)){ image.Format = MagickFormat.WebP; image.Quality = quality; image.Write(SaveImagePath); }
Код рабочий. У вас не прописан using, либо вы привели не весь код и в вашем куске нет кода с ошибкой.Подскажите пожалуйста как исправить ошибку чтоб уменьшить качество .webp & .jpeg изображения.
Пробывал менять версии Magick.NET-Q8-AnyCPU на ту которая стоит в посту выше, 13.1.2, 13.6.0 и на актуальную. Оригинальная авторкская версия .dll из шаблона не работает с кубиком, все обновления выдают следующию ошибку.
""Компиляция кода Ошибка в действии "CS0234" "Ошибка в директивах using. The type or namespace name 'Defines' does not exist in the namespace 'ImageMagick' (are you missing an assembly reference?)". [Строка: 4; Cтолбец: 19]""
Код рабочий. У вас не прописан using, либо вы привели не весь код и в вашем куске нет кода с ошибкой.
все кубик заработал, после того как добавил это решение.Посмотреть вложение 123801
В проекте только один кубик который вы видите выше. Эти дерективы в прокте, нужно еще какойто добавить?
string inputImagePath = project.Variables["InputImagePath"].Value;
string outputPath = project.Variables["SaveImagePath"].Value;
string inputFont = project.Variables["Inputfont"].Value;
string inputText = project.Variables["Inputtext"].Value;
int width = 1000; // Ширина итогового изображения
int height = 2000; // Высота итогового изображения
int textAreaHeight = height / 4; // Высота области для текста (1/4 высоты изображения)
int fontSize = 90; // Размер шрифта
MagickColor fontColor = new MagickColor("#FFFFFF"); // Цвет текста
// Создаем пустое изображение с фоном
using (MagickImage emptyImage = new MagickImage(new MagickColor("#808080"), width, height))
{
// Настроим параметры для добавления текста
MagickReadSettings readSettings = new MagickReadSettings
{
FillColor = fontColor, // цвет текста
BackgroundColor = MagickColors.Transparent, // фон текста
Font = inputFont, // Шрифт текста
Width = width - 40, // Ширина текста (с отступами)
Height = textAreaHeight - 40, // Высота текста (с отступами)
FontPointsize = fontSize
};
// Генерируем изображение с текстом
using (MagickImage label = new MagickImage($"label:{inputText}", readSettings))
{
// Располагаем текст по центру верхней 1/4 части изображения
int textX = 20; // Отступ по горизонтали
int textY = (textAreaHeight - label.Height) / 2; // Центрирование по вертикали в верхней 1/4
emptyImage.Composite(label, textX, textY, CompositeOperator.Over);
}
// Загружаем изображение, которое нужно вставить в нижнюю половину
using (MagickImage inputImage = new MagickImage(inputImagePath))
{
// Изменяем размер вставляемого изображения под ширину и высоту нижней половины
inputImage.Resize(width, height / 2);
// Композиция: накладываем изображение в нижнюю половину
emptyImage.Composite(inputImage, 0, height / 2, CompositeOperator.Over);
}
// Сохраняем результат
emptyImage.Write(outputPath);
}
Как в этой либе не знаю, но в c# есть метод Graphics.MeasureString позволяющий получить размеры строки до её добавления.Коллеги, может кто игрался с текстом. немогу придумать решение. текст разной длины, может влезть по длине, а может и нет. как бы придумать с переносом что то если много не влезает и от центровать, если чуток то можно и шрифт немного меньше сделать. Может кто то что то подобное делал ? Прикладываю тестовый вариант. Может кому то понадобится.
C#:string inputImagePath = project.Variables["InputImagePath"].Value; string outputPath = project.Variables["SaveImagePath"].Value; string inputFont = project.Variables["Inputfont"].Value; string inputText = project.Variables["Inputtext"].Value; int width = 1000; // Ширина итогового изображения int height = 2000; // Высота итогового изображения int textAreaHeight = height / 4; // Высота области для текста (1/4 высоты изображения) int fontSize = 90; // Размер шрифта MagickColor fontColor = new MagickColor("#FFFFFF"); // Цвет текста // Создаем пустое изображение с фоном using (MagickImage emptyImage = new MagickImage(new MagickColor("#808080"), width, height)) { // Настроим параметры для добавления текста MagickReadSettings readSettings = new MagickReadSettings { FillColor = fontColor, // цвет текста BackgroundColor = MagickColors.Transparent, // фон текста Font = inputFont, // Шрифт текста Width = width - 40, // Ширина текста (с отступами) Height = textAreaHeight - 40, // Высота текста (с отступами) FontPointsize = fontSize }; // Генерируем изображение с текстом using (MagickImage label = new MagickImage($"label:{inputText}", readSettings)) { // Располагаем текст по центру верхней 1/4 части изображения int textX = 20; // Отступ по горизонтали int textY = (textAreaHeight - label.Height) / 2; // Центрирование по вертикали в верхней 1/4 emptyImage.Composite(label, textX, textY, CompositeOperator.Over); } // Загружаем изображение, которое нужно вставить в нижнюю половину using (MagickImage inputImage = new MagickImage(inputImagePath)) { // Изменяем размер вставляемого изображения под ширину и высоту нижней половины inputImage.Resize(width, height / 2); // Композиция: накладываем изображение в нижнюю половину emptyImage.Composite(inputImage, 0, height / 2, CompositeOperator.Over); } // Сохраняем результат emptyImage.Write(outputPath); }
Ну пока вроде такую залипуху сделал, смотрю что и как гибко сделать. не идеал, но поиграться можно.Как в этой либе не знаю, но в c# есть метод Graphics.MeasureString позволяющий получить размеры строки до её добавления.
В цикле меняешь FontSize в сторону уменьшения пока строка не станет нужного размера. С переносами посложнее, но тоже решаемо.
// Получаем пути к файлам и параметры из переменных проекта
string inputImagePath = project.Variables["InputImagePath"].Value; // Путь к изображению
string outputPath = project.Variables["SaveImagePath"].Value; // Куда сохранять результат
string inputFont = project.Variables["Inputfont"].Value; // Шрифт текста
string inputText = project.Variables["Inputtext"].Value; // Сам текст
// Основные параметры изображения
int width = 1000; // Ширина итогового изображения
int height = 2000; // Высота итогового изображения
int reservedForImage = height / 2; // Нижняя половина отводится под картинку
int textAreaHeight = height - reservedForImage; // Верхняя область для текста
int fontSize = 120; // Начальный размер шрифта
int minFontSize = 50; // Минимально допустимый размер шрифта
int leftPadding = 20; // Отступ текста слева
int rightPadding = 20; // Отступ текста справа
int textTopPadding = 50; // Отступ текста сверху
MagickColor fontColor = new MagickColor("#FFFFFF"); // Цвет текста (белый)
// Процент затемнения (0% - нет затемнения, 100% - полностью черный экран)
int tintOpacity = 00;
using (MagickImage emptyImage = new MagickImage(new MagickColor("#508080"), width, height))
{
// Настройки для текста
MagickReadSettings readSettings = new MagickReadSettings
{
FillColor = fontColor, // Цвет шрифта
BackgroundColor = MagickColors.Transparent, // Фон прозрачный
Font = inputFont, // Шрифт текста
Width = width - leftPadding - rightPadding, // Максимальная ширина текста с учетом отступов
Height = textAreaHeight, // Высота области для текста
FontPointsize = fontSize, // Начальный размер шрифта
TextGravity = Gravity.North // Выравнивание по верхнему краю
};
// Функция проверки, помещается ли текст
bool CanTextFit(string text, int fontSizeCheck)
{
readSettings.FontPointsize = fontSizeCheck;
using (MagickImage caption = new MagickImage($"caption:{text}", readSettings))
{
return caption.Width <= readSettings.Width && caption.Height <= readSettings.Height;
}
}
// Подбираем размер шрифта (уменьшаем, пока текст не поместится)
while (!CanTextFit(inputText, fontSize) && fontSize > minFontSize)
{
fontSize--;
}
readSettings.FontPointsize = fontSize;
// Генерируем изображение с текстом
using (MagickImage caption = new MagickImage($"caption:{inputText}", readSettings))
{
int textX = leftPadding; // Горизонтальный отступ
int textY = textTopPadding; // Отступ сверху
emptyImage.Composite(caption, textX, textY, CompositeOperator.Over);
}
// Загружаем изображение и точно подгоняем его под нижнюю половину
using (MagickImage inputImage = new MagickImage(inputImagePath))
{
inputImage.Resize(width, reservedForImage); // Масштабируем по ширине
inputImage.Extent(width, reservedForImage, Gravity.Center); // Обрезаем, если нужно
emptyImage.Composite(inputImage, 0, textAreaHeight, CompositeOperator.Over);
}
// Применяем тонировку ко всему изображению
if (tintOpacity > 0)
{
byte alpha = (byte)(255 * (tintOpacity / 100.0)); // Перевод процентов в 0-255
MagickColor overlayColor = new MagickColor(0, 0, 0, alpha); // Черный с прозрачностью
using (MagickImage overlay = new MagickImage(overlayColor, width, height))
{
emptyImage.Composite(overlay, 0, 0, CompositeOperator.Over);
}
}
// Сохраняем итоговое изображение
emptyImage.Write(outputPath);
}