Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Изменение размера изображения / 25 сообщений из 26, страница 1 из 2
09.04.2009, 19:13
    #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
09.04.2009, 19:31
    #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
29.04.2009, 17:40
    #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
Период между сообщениями больше года.
27.07.2018, 08:43
    #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
27.07.2018, 09:01
    #39679987
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение размера изображения
КурдльПохоже, что такой объем имеет изображение формата .bmp
ну дык сохраняй как jpg или png
...
Рейтинг: 0 / 0
27.07.2018, 09:29
    #39680005
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение размера изображения
КурдльПри изменении нижеприведенных параметров до HiSpeed почти ничего не происходит (может может на пару %% уменьшаются)
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

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

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

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

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

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

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


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

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

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

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

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

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

Спасибо!
Сейчас гляну.
...
Рейтинг: 0 / 0
27.07.2018, 13:16
    #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
27.07.2018, 13:30
    #39680191
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение размера изображения
handmadeFromRu,

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

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

Вот еще

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

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

Вот еще

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

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

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

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


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