|
Установка значения для сжатия размеров файлов jpg и png | ☑ | ||
---|---|---|---|---|
0
falselight
07.07.20
✎
06:23
|
Задача в запуске сжатия файлов изображений с диска с расширениями jpg и png, с размерами больше или равные 5мб, 5000000 байт.
Для сжатия использую программу ImageMagic-7.0.10-Q16-HDRI с файлом convert.exe. С трудом пока понимаю какие ей нужно задавать параметры. И основной вопрос, как устанавливать размер преобразованных файлов в 4,9 Мб ? Как его вычислять из имеющегося, у них первоначально учитывая то что для сжатия используется инструкция, - СтароеИмя = "D:\2020_07_06\ИзменениеКартинки\1.jpg"; НовоеИмяФайла = "D:\2020_07_06\ИзменениеКартинки\2.jpg"; ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """+СтароеИмя+""""+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+""""+НовоеИмяФайла+"""",,истина); |
|||
1
falselight
07.07.20
✎
06:30
|
Есть информация по этому вопросу https://habr.com/ru/post/351014/ .
Но буду рад если кт ото поделится идеей и подскажет по вопросу. |
|||
2
falselight
07.07.20
✎
06:57
|
Можно ли это делать в одной строке ЗапуститьПриложение(" ?
Или нужно как в (1) использовать какие то бат файлы ? |
|||
3
faramund
07.07.20
✎
08:02
|
Я использовал для сжатия WIA.ImageFile.
Сжимал картинку до требуемого размера по горизонтали/вертикали. objImageFile = Новый COMОбъект("WIA.ImageFile"); objImageProcess = Новый COMОбъект("WIA.ImageProcess"); objImageFile.LoadFile(ИмяТемпФайлаПолностью); Размер = ?(objImageFile.Width>objImageFile.Height, objImageFile.Width, objImageFile.Height); ЦелевойРазмерУменьшеннойКартинкиНоменклатуры = Константы.ЦелевойРазмерУменьшеннойКартинкиНоменклатуры.Получить(); Если Размер > ЦелевойРазмерУменьшеннойКартинкиНоменклатуры Тогда КоэффиентУменьшения = Размер / ЦелевойРазмерУменьшеннойКартинкиНоменклатуры; objImageProcess.Filters.Add(objImageProcess.FilterInfos("Scale").FilterID); objImageProcess.Filters.Item(1).Properties.Item("MaximumWidth").Value = objImageFile.Width/КоэффиентУменьшения; objImageProcess.Filters.Item(1).Properties.Item("MaximumHeight").Value = objImageFile.Height/КоэффиентУменьшения; objImageFile = objImageProcess.Apply(objImageFile); objImageFile.SaveFile(ИмяТемпФайлаПолностьюУменьшенный); Иначе ДвоичныеДанные.Записать(ИмяТемпФайлаПолностьюУменьшенный); КонецЕсли; |
|||
4
falselight
07.07.20
✎
08:03
|
Под данную реализацию, учитывая что обработка не будет универсальной,
обработать нужно только файлы с расширением jpg то есть есть файлы у которых размер больше 5 мб (5000000 б ) как в строке их приводить все к размеру 4,9 мб (4900000 б ) ? ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """ + СтароеИмя + """"+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+ """"+НовоеИмяФайла+"""",,истина); |
|||
5
falselight
07.07.20
✎
08:03
|
(3) качество не терялось?
|
|||
6
falselight
07.07.20
✎
08:06
|
У меня вопрос, что задавать вот в этой строке, для уменьшения любого размера большего 5 мб, до 4,9 мб
и возможно ли такое вообще ? """"+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+ |
|||
7
falselight
07.07.20
✎
08:10
|
(3) У меня есть только размер Выборка.Размер
если Выборка.Размер = 7 568 225 то Выборка.Размер / 4.9 = 1 544 535,714285714285714285714285714 Как вывести формулу что бы получить 4,9 ? Или что нужно задавать в строке """"+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+ |
|||
8
Мимохожий Однако
07.07.20
✎
08:14
|
(1) Там по ссылке есть батник. Его и используй
|
|||
9
falselight
07.07.20
✎
08:16
|
(8) Не знаком с батниками (((( И как его использовать .
Пока вот Файл 7,21 Мб сжался до 1,44 мб , этой строкой """"+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+ |
|||
10
faramund
07.07.20
✎
08:16
|
(5) Качество естественно теряется, т.к картинка становится меньше по линейным размерам, меньше становится и размер файла. Без потерь качества тут никак. Сжатие есть сжатие. У WIA.ImageProcess наверняка есть параметры сжатия без изменения линейных размеров, которыми можно воспользоваться. На просторах интернета поищи информацию по этой компоненте, я в свое время находил хорошую статью по этому COM объекту при работе с ним в 1С.
(7) целевой размер делишь на исходный - получаешь коэффициент уменьшения |
|||
11
falselight
07.07.20
✎
08:16
|
(9+) качество нормальное
|
|||
12
falselight
07.07.20
✎
08:18
|
(10) да информации полно, голова только ее не усваивает ....
Я сейчас хочу доделать вот эту строку """"+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+ |
|||
13
falselight
07.07.20
✎
08:31
|
почему то такой пример ничего не делает (((
СтароеИмя = "C:\Файлы1с\TEST\BENG04B_1.jpeg"; НовоеИмяФайла = "C:\Файлы1с\TEST\BENG04B_1 new.jpeg"; ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """+СтароеИмя+""""+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+""""+НовоеИмяФайла+"""",,истина); |
|||
14
falselight
07.07.20
✎
08:32
|
должно так сработать
СтароеИмя = "C:\Файлы1с\TEST\BENG04B_1.jpg"; НовоеИмяФайла = "C:\Файлы1с\TEST\BENG04B_1 new.jpg"; ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """+СтароеИмя+""""+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+""""+НовоеИмяФайла+"""",,истина); |
|||
15
falselight
07.07.20
✎
08:36
|
Сработало но почему то не сразу (((
но тут вот так получилось. размер с 41,00 Мб сжался до 5,42 мб Подскажите пожалуйста, если фото 41,00 мб, как его ещё поджать? что менять в этой строке? """"+" -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 "+ Пока сам буду экспериментировать. |
|||
16
falselight
07.07.20
✎
08:42
|
такая строка
""""+" -filter Lanczos -define jpeg:dct-method=float -quality 70 -gaussian-blur 0.05 " сжала картинку с 41,00 мб до 4,85 ... то есть менять нужно параметр -quality 70 |
|||
17
Новый участник
07.07.20
✎
08:59
|
Тебя, конечно, мало толка учить. Но всё же - напиши ручкой на бумажке точную постановку задачи. Перечитай её. Пойми её. Сравни своё решение с задачей. Ответь для себя, сделал ли ты то, что нужно?
|
|||
18
Йохохо
07.07.20
✎
09:05
|
convert original.jpeg -define jpeg:extent=4900kb output.jpg
|
|||
19
falselight
07.07.20
✎
09:28
|
(18) Не знаю этой тематики, что там и как нужно писать в этой командной строке. По этому гадать не могу.
Или могу на сколько получается. Ну а вся эта информация, не усваивается в голове. (17) Пока пишу вот такой алгоритм. Первая версия решения. Она надеюсь все равно исходное версии фото не тронет. А новые будут с постфиксом new . Да вы правы на счет бумаги и ручки, и составления тз. Нужно приучать себя и не думать о том сколько вообще заплатить за это могут. Нужно делать все профессионально и качественно. но я думаю что к этому и идет, со временем, и документацию всю составлю Пока такой прототип решения. &НаСервере Процедура ИзменитьРазмерНаСервере() МестоПоложение = "C:\Файлы1с\"; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка, | НоменклатураПрисоединенныеФайлы.Наименование КАК НаименованиеИзображения, | НоменклатураПрисоединенныеФайлы.ВладелецФайла.Ссылка КАК ВладелецФайлаСсылка, | НоменклатураПрисоединенныеФайлы.ВладелецФайла.Наименование КАК ВладелецФайлаНаименование, | НоменклатураПрисоединенныеФайлы.Размер КАК Размер, | НоменклатураПрисоединенныеФайлы.ПутьКФайлу КАК ПутьКФайлу, | НоменклатураПрисоединенныеФайлы.ВладелецФайла.ФайлКартинки КАК ВладелецФайлаФайлКартинки, | НоменклатураПрисоединенныеФайлы.Том.ПолныйПутьWindows КАК ТомПолныйПутьWindows, | НоменклатураПрисоединенныеФайлы.Расширение КАК Расширение |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.Размер >= 5000000 | |УПОРЯДОЧИТЬ ПО | ВладелецФайлаНаименование"; Рез = Запрос.Выполнить(); Если Не Рез.Пустой() Тогда Выборка = Рез.Выбрать(); н = 1; Пока Выборка.Следующий() Цикл СтароеИмя = МестоПоложение + СокрЛП(Выборка.ПутьКФайлу); // НовоеИмяФайла = МестоПоложение + ЛЕВ(Выборка.ПутьКФайлу, СтрДлина(СокрЛП(Выборка.ПутьКФайлу))-4) + "new." + ПРАВ(Выборка.ПутьКФайлу, 3); // Если Выборка.Размер >= 5000000 Тогда Сообщить(СТРОКА(н) +"). "+ Выборка.ВладелецФайлаНаименование +", pic: "+ Выборка.НаименованиеИзображения + " size: " + Выборка.Размер + ", " + Выборка.ПутьКФайлу); Если Выборка.Размер < 35000000 Тогда ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """ + СтароеИмя + """" + " -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 " + """" + НовоеИмяФайла+"""", , Истина); Иначе ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """ + СтароеИмя + """" + " -filter Lanczos -define jpeg:dct-method=float -quality 70 -gaussian-blur 0.05 " + """" + НовоеИмяФайла+"""" , , Истина); КонецЕсли; н = н + 1; // СпрОбъект = Выборка.Ссылка.ПолучитьОбъект(); СпрОбъект.ПутьКФайлу = ЛЕВ(Выборка.ПутьКФайлу, СтрДлина(СокрЛП(Выборка.ПутьКФайлу))-4) + "new." + ПРАВ(Выборка.ПутьКФайлу, 3); СпрОбъект.Записать(); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
20
Йохохо
07.07.20
✎
09:33
|
"""" + " -define jpeg:extent=4900kb "
|
|||
21
Йохохо
07.07.20
✎
09:33
|
вместо """" + " -filter Lanczos -define jpeg:dct-method=float -quality 70 -gaussian-blur 0.05 "
|
|||
22
Ёпрст
07.07.20
✎
09:33
|
(19) храни свои картинки не в базе, а просто на диске, имя файла сделай гуидом и всё. Тогда пофиг будкт на размер картинки.
|
|||
23
Йохохо
07.07.20
✎
09:33
|
и Если в топку
|
|||
24
Новый участник
07.07.20
✎
09:37
|
Может всё же в монтажники кондиционеров, а? И почёт, и уважение, и на свежем воздухе, и никакого кода. Или вот шиномонтаж... Есличо, мы с ребёнком восстановили станок и можем его в комплекте (станок, компрессор, частотникк, домкрат или rocla) дать в работу. СЗ МО. В личку :)
|
|||
25
sitex
naïve
07.07.20
✎
09:42
|
(20) Без других параметров просто так жать jpeg, можешь на выходе получить неведому зверушку при большом размере.
|
|||
26
Йохохо
07.07.20
✎
09:44
|
(25) -filter Lanczos -define jpeg:extent=4900kb
так надежнее? |
|||
27
sitex
naïve
07.07.20
✎
09:44
|
(26) прогрессивное сжатие jpeg надо добавить и в зависимости от размера играть настройками -gaussian-blur 0.05
|
|||
28
sitex
naïve
07.07.20
✎
09:46
|
(19) Зачем повторяться в коде ЗапуститьПриложение(... вынеси в отдельную процедуру и передавай туда параметры в структуре.
|
|||
29
Йохохо
07.07.20
✎
09:47
|
(27) jpeg:extent=4900kb, имхо если уж это сфейлит то только глазьями и ручками
|
|||
30
sitex
naïve
07.07.20
✎
09:49
|
(15) Так ты что думаешь файл тебе моментально в 40мб в 4мб сохраниться ? в cmd запусти удивишься.
|
|||
31
sitex
naïve
07.07.20
✎
09:58
|
я чего первоисточнику не обращаемся ? https://imagemagick.org/script/command-line-options.php
|
|||
32
falselight
07.07.20
✎
09:58
|
Подскажите по такому вопросу, а как мне получить размер файла? Нового????
СтароеИмя = МестоПоложение + СокрЛП(Выборка.ПутьКФайлу); // НовоеИмяФайла = МестоПоложение + ЛЕВ(Выборка.ПутьКФайлу, СтрДлина(СокрЛП(Выборка.ПутьКФайлу))-4) + "new." + ПРАВ(Выборка.ПутьКФайлу, 3); Размер НовоеИмяФайла ? |
|||
33
Йохохо
07.07.20
✎
09:59
|
(32) -define jpeg:extent=4900kb
!!!!11 |
|||
34
falselight
07.07.20
✎
10:00
|
(32+) А то его потом вот тут нужно обновить:
// СпрОбъект = Выборка.Ссылка.ПолучитьОбъект(); СпрОбъект.ПутьКФайлу = ЛЕВ(Выборка.ПутьКФайлу, СтрДлина(СокрЛП(Выборка.ПутьКФайлу))-4) + "new." + ПРАВ(Выборка.ПутьКФайлу, 3); СпрОбъект.Записать(); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
35
Йохохо
07.07.20
✎
10:00
|
афк в тарелку)
|
|||
36
falselight
07.07.20
✎
10:00
|
(33) Это если делать как вы сказали. Я пока такого не пробовал. делаю как в (19) .
|
|||
37
falselight
07.07.20
✎
10:13
|
тестировать буду так
&НаСервере Процедура ИзменитьРазмерНаСервере() МестоПоложение = "C:\Файлы1с\"; Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка, | НоменклатураПрисоединенныеФайлы.Наименование КАК НаименованиеИзображения, | НоменклатураПрисоединенныеФайлы.ВладелецФайла.Ссылка КАК ВладелецФайлаСсылка, | НоменклатураПрисоединенныеФайлы.ВладелецФайла.Наименование КАК ВладелецФайлаНаименование, | НоменклатураПрисоединенныеФайлы.Размер КАК Размер, | НоменклатураПрисоединенныеФайлы.ПутьКФайлу КАК ПутьКФайлу, | НоменклатураПрисоединенныеФайлы.ВладелецФайла.ФайлКартинки КАК ВладелецФайлаФайлКартинки, | НоменклатураПрисоединенныеФайлы.Том.ПолныйПутьWindows КАК ТомПолныйПутьWindows, | НоменклатураПрисоединенныеФайлы.Расширение КАК Расширение |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.Размер >= 5000000 | |УПОРЯДОЧИТЬ ПО | ВладелецФайлаНаименование"; Рез = Запрос.Выполнить(); Если Не Рез.Пустой() Тогда Выборка = Рез.Выбрать(); н = 1; Пока Выборка.Следующий() Цикл СтароеИмя = МестоПоложение + СокрЛП(Выборка.ПутьКФайлу); // НовоеИмяФайла = МестоПоложение + ЛЕВ(Выборка.ПутьКФайлу, СтрДлина(СокрЛП(Выборка.ПутьКФайлу))-4) + "new." + ПРАВ(Выборка.ПутьКФайлу, 3); // Если Выборка.Размер >= 5000000 Тогда Сообщить(СТРОКА(н) +"). "+ Выборка.ВладелецФайлаНаименование +", pic: "+ Выборка.НаименованиеИзображения + " size: " + Выборка.Размер + ", " + Выборка.ПутьКФайлу); Если Выборка.Размер < 35000000 Тогда ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """ + СтароеИмя + """" + " -filter Lanczos -define jpeg:dct-method=float -quality 75 -gaussian-blur 0.05 " + """" + НовоеИмяФайла+"""", , Истина); Иначе ЗапуститьПриложение("""C:\Program Files\ImageMagick-7.0.10-Q16-HDRI\convert.exe"" """ + СтароеИмя + """" + " -filter Lanczos -define jpeg:dct-method=float -quality 70 -gaussian-blur 0.05 " + """" + НовоеИмяФайла+"""" , , Истина); КонецЕсли; н = н + 1; // НовыйСозданныйФайл =Новый Файл(МестоПоложение + ЛЕВ(Выборка.ПутьКФайлу, СтрДлина(СокрЛП(Выборка.ПутьКФайлу))-4) + "new." + ПРАВ(Выборка.ПутьКФайлу, 3)); // СпрОбъект = Выборка.Ссылка.ПолучитьОбъект(); СпрОбъект.ПутьКФайлу = ЛЕВ(Выборка.ПутьКФайлу, СтрДлина(СокрЛП(Выборка.ПутьКФайлу))-4) + "new." + ПРАВ(Выборка.ПутьКФайлу, 3); СпрОбъект.Размер = НовыйСозданныйФайл.Размер(); СпрОбъект.Записать(); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры |
|||
38
Сияющий в темноте
07.07.20
✎
10:13
|
ну в чем проблема,пишем сценарий конвертации,в конце сценария созданм файл финиша,а в 1с подписываемся на мониторинг создания этого файла.
далее,ввгпужаем файлы для обработки в директорию,пинаем суенарий и ждем,когда он сыиниширует. |
|||
39
Йохохо
07.07.20
✎
10:14
|
(38) рекурсию еще, надо 4.9мб)
|
|||
40
falselight
07.07.20
✎
10:16
|
Код выполняется, но почему то файл в каталоге не появляется !!!! Новый
Хотя по коду отрабатывает, даже появляется его новый размер ! |
|||
41
Новый участник
07.07.20
✎
11:24
|
Повторю предложение о работе шиномонтажником. Там всего 4 педали, 3 кнопки и регулятор.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |