powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Изменение размера изображения
25 сообщений из 26, страница 1 из 2
Изменение размера изображения
    #35923674
mar55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не понимаю в чем ошибка....
Тестовый пример по изменению размера картинки. Функция которая сжимает картинку по заданным значениям.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
    protected void Resize(int width, int height,  string adressin, string adressout)
    {
        Image img = Image.FromFile(adressin); 
        Bitmap newImage;
        Graphics g;
        float kw;
        float kh;

            newImage = new Bitmap(width, height); 
            g = Graphics.FromImage(newImage);
            kw = ((float)width) / ((float)img.Width);
            kh = ((float)height) / ((float)img.Height);
            g.Transform = new Matrix(kw, 0, 0, kh, 0, 0); 
            g.DrawImageUnscaled(img, 0, 0);
            newImage.Save(adressout, ImageFormat.Jpeg);

      }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Resize(100, 100, @"C:\2.jpg", @"C:\test1n.jpg");
        Resize(100, 100, @"C:\1.jpg", @"C:\test2n.jpg");
    }

Почему-то с одними файлами работает нормально - с другими нет.
проверяла на стандартных виндовских из "мои документы". изображение "Голубые холмы" ведет себя по другому, чем другие. оно не правильно масштабируется. т.е. размер на выходе верный, но большая часть картинки черным цветом залита. попробовала с фотками тоже самое.
...
Рейтинг: 0 / 0
Изменение размера изображения
    #35923692
alreves
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
private Bitmap FixedSize(Bitmap imgPhoto, int width, int height)
		{
			int sourceWidth = imgPhoto.Width;
			int sourceHeight = imgPhoto.Height;
			int sourceX = 0;
			int sourceY = 0;
			int destX = 0;
			int destY = 0;

			float nPercent;
			float nPercentW;
			float nPercentH;

			nPercentW = ((float)width / sourceWidth);
			nPercentH = ((float)height / sourceHeight);
			if (nPercentH < nPercentW)
			{
				nPercent = nPercentH;
				destX = Convert.ToInt16((width - (sourceWidth * nPercent)) / 2);
			}
			else
			{
				nPercent = nPercentW;
				destY = Convert.ToInt16((height - (sourceHeight * nPercent)) / 2);
			}

			int destWidth = (int)(sourceWidth * nPercent);
			int destHeight = (int)(sourceHeight * nPercent);

			Bitmap bmPhoto = new Bitmap(width, height);
			bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
								  imgPhoto.VerticalResolution);

			using (Graphics grPhoto = Graphics.FromImage(bmPhoto))
			{
				grPhoto.Clear(Color.FromArgb(0, 252, 219, 173)); // Back color.
				grPhoto.InterpolationMode = InterpolationMode.Bilinear; //Interpolation

				grPhoto.DrawImage(imgPhoto,
								  new Rectangle(destX, destY, destWidth, destHeight),
								  new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
								  GraphicsUnit.Pixel);
			}
			return bmPhoto;
		}
...
Рейтинг: 0 / 0
Изменение размера изображения
    #35961671
MIf_guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
private Image ResizeImage(Image b, int nWidth, int nHeight)
{
Bitmap result = new Bitmap(nWidth, nHeight);
using (Graphics g = Graphics.FromImage(result))
g.DrawImage(b, 0, 0, nWidth, nHeight);
return result;
}

Во как на c#)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Изменение размера изображения
    #39679982
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С удивлением заметил, что распространенный в сети алгоритм ужатия изображения в большинстве случаев увеличивает объем, даже уменьшая его размеры :(
Например, уменьшенная до 800х600 px. картинка в любом случае получается ~650КБ
Похоже, что такой объем имеет изображение формата .bmp
При изменении нижеприведенных параметров до HiSpeed почти ничего не происходит (может может на пару %% уменьшаются)
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

Существует ли более качественный алгоритм ужатия картинок, чем приведенный ниже?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
        public Image ResizeOrigImg(Image image, int nWidth, int nHeight, out int newSizeImage, out bool isWidth)
        {
            int newWidth, newHeight;
            var coefH = nHeight / (double)image.Height;
            var coefW = nWidth / (double)image.Width;
            if (coefW >= coefH)
            {
                newHeight = (int)(image.Height * coefH);
                newWidth = (int)(image.Width * coefH);
                isWidth = false;
                newSizeImage = newWidth;
            }
            else
            {
                newHeight = (int)(image.Height * coefW);
                newWidth = (int)(image.Width * coefW);
                isWidth = true;
                newSizeImage = newHeight;
            }

            Image result = new Bitmap(newWidth, newHeight);
            using (var g = Graphics.FromImage(result))
            {
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.SmoothingMode = SmoothingMode.HighQuality;
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;

                g.DrawImage(image, 0, 0, newWidth, newHeight);
                g.Dispose();
            }
            return result;
        }



???
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39679987
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльПохоже, что такой объем имеет изображение формата .bmp
ну дык сохраняй как jpg или png
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680005
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльПри изменении нижеприведенных параметров до HiSpeed почти ничего не происходит (может может на пару %% уменьшаются)
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

Сколько не ешь таблеток от похудения, худее не станешь

Если вам удастся пожать BMP, премия гарантирована!
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680033
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Сколько не ешь таблеток от похудения, худее не станешь

Если вам удастся пожать BMP, премия гарантирована!
Даже мое слабоумие - не повод надеяться, что изображение можно ужать без потери качества :/
Но моя надежда была в другом: если я беру, например, JPEG размером 1024х768 и объемом 200КБ, ужав его до 800х600 я хотел бы получить объем где-то 120КБ, а не 650КБ, как получаю сейчас :(

ИзопропилКурдльПохоже, что такой объем имеет изображение формата .bmp
ну дык сохраняй как jpg или png

Куда "сохраняй"? Мне его надо в BLOB упихать. БД без разницы, какое расширение ты придумаешь - один хрен это массив байт.
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680048
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльJPEG размером 1024х768 и объемом 200КБ, ужав его до 800х600 я хотел бы получить объем где-то 120КБ, а не 650КБ, как получаю сейчас :(JPEG понятие растяжимое (в прямом смысле :), потому что у него есть степени сжатия. Если ты берешь JPEG с высокой степенью сжатия (и высокой потерей качества), распаковываешь, уменьшаешь размер и запаковываешь обратно в JPEG с низкой степенью сжатия (низкой потерей качества), то неудивительно, что размер увеличится
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680071
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProJPEG понятие растяжимое (в прямом смысле :), потому что у него есть степени сжатия. Если ты берешь JPEG с высокой степенью сжатия (и высокой потерей качества), распаковываешь, уменьшаешь размер и запаковываешь обратно в JPEG с низкой степенью сжатия (низкой потерей качества), то неудивительно, что размер увеличится

Где в коде, приведенном мной в сообщении , запаковка в JPEG?
Подскажи, пожалуйста, что ты конкретно предлагаешь? (Про алгоритмы сжатия изображений я когда-то читал в журнале "Наука и Жизнь", так что можешь не объяснять самые азы).
Спасибо!
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680086
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльГде в коде, приведенном мной в сообщении , запаковка в JPEG?Тогда что ты хочешь? Ты разжимаешь файл из JPEG-а, отчего он становится сильно больше, потом ресайзишь - он становится немного меньше, но не становится меньше изначально сжатого jpeg-а. А раз ты не сжимаешь результат обратно в jpeg, то твое сравнение размеров:
КурдльJPEG размером 1024х768 и объемом 200КБ, ужав его до 800х600 я хотел бы получить объем где-то 120КБ, а не 650КБ, как получаю сейчасвообще некорректно, так как ты сравниваешь размер сжатого jpeg-а с несжатым изображением.


Курдльужав его до 800х600Используй вместо термина "сжимание", термин "ресайз", самому понятнее станет
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680091
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProИспользуй вместо термина "сжимание", термин "ресайз", самому понятнее станет
Ок! "Ресайз".
Что ты посоветуешь для сохранения изображения в уменьшенном и сжатом виде?
Спасибо!

P.S. Посоветовать сжать его в JPEG для меня равносильно совету мышам стать ёжиками
Есть ссылки на обсуждения и т.п.?
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680095
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично я ничего посоветовать не могу, ибо сам не работал с этим. Я всего лишь тебе расписал, в чем проблема с размером, теперь ты вооружен и можешь идти в гугель )
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680098
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЛично я ничего посоветовать не могу, ибо сам не работал с этим. Я всего лишь тебе расписал, в чем проблема с размером, теперь ты вооружен и можешь идти в гугель )
Т.е. ты стратег из анекдота про мышей и ёжиков (в худшем смысле этого слова)?
Переполняешься своей значимостью для вселенной?..
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680106
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз, ты продемонстрировал непонимание:
КурдльКуда "сохраняй"? Мне его надо в BLOB упихать. БД без разницы, какое расширение ты придумаешь - один хрен это массив байт.Я попытался разъяснить, что не в расширении дело, а в формате. Не хочешь это понимать, можешь дальше жрать кактус, как те самые мыши из другого анекдота.
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680109
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльP.S. Посоветовать сжать его в JPEG для меня равносильно совету мышам стать ёжиками

Чувак, раз жрёшь кактус, запивай текилой.
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680132
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,
В чем вопрос то?
Есть формат изображения. Он больше влияет на размер чем сжатие в кавычках.
Тебе шашечки или ехать?
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680140
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Курдль,
В чем вопрос то?
Есть формат изображения. Он больше влияет на размер чем сжатие в кавычках.
Тебе шашечки или ехать?
Имею задачу:
1. Загрузить изображение от клиента на сервер
2. Уменьшить геометрические размеры изображения до определенных границ. Желательно с уменьшением занимаемого места.
3. Упихать изображение в БД
4. По запросу отдавать изображение пользователям.

Проблема с п.2 часть II
Я понимаю, что если открыть файл .tiff обычным фоторедактором и сохранить его, как .jpg - объем файла уменьшится.
Я даже наслышан, как вершится это волшебство. Но повторить в своем проекте не могу.
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680150
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльИмею задачу:
1. Решить где делать. На клиенте или сервере.
Можно и там и там.
2.
У меня фотоаппарат Принудительно выставлен в 1200 пикселей.
Мне хватает.
Это размер в пикселях.
3. Для экономии места тебе сказали - jpeg.
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680151
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КурдльЯ даже наслышан, как вершится это волшебство. Но повторить в своем проекте не могу.

Держи волшебную палочку

http://imageprocessor.org/
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680162
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Спасибо!
Сейчас гляну.
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680177
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все что под классическим .net работает по такому же коду что ты и написал
можно уменьшит фото просто добавив Encoder.Quality и значение 1 до 100 чтоб качество задать. при 100 эт херня делает размеры больше. можно сделать чтоб была прогрессивная развертка Encoder.RenderMethod и RenderProgressive.

смотрел сторонние библиотеки что на .net сделано одно и тоже +-

То как это делает фотошоп не добиться, чтоб размер качество были как то адекватно.


ну насчет библы что посоветовал хвост..тот же код только скучей настроек
можете полазить.
https://github.com/JimBobSquarePants/ImageProcessor/blob/develop/src/ImageProcessor/Imaging/Resizer.cs
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680191
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,

Спасибо!
Блин, дежа вю! Вроде я этот код давным-давно препарировал.
Проклятый склероз...
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680469
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот этот пакет кто-нибудь использовал?
Image Resizer
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680470
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курдль,

Платный, слишком мощный функционал, чтобы ужать картинку. Из пушки по воробьям.

Вот еще

https://github.com/SixLabors/ImageSharp
https://github.com/briandonahue/FluxJpeg.Core
https://github.com/BitMiracle/libjpeg.net
...
Рейтинг: 0 / 0
Изменение размера изображения
    #39680480
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttКурдль,

Платный, слишком мощный функционал, чтобы ужать картинку. Из пушки по воробьям.

Вот еще

Спасибо, посмотрю!

А про "платный"... Как я мог не заметить?!! Сгрузил через NuGet, настроил, испытал - понравилось.
Теперь ждать, что с карты деньги спишут?

Кстати, вот более свежий пример использования Image Resizer

А про "из пушки по воробьям" не понял. Ты ж мне присоветовал целый Image Processor !
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Изменение размера изображения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]