![]() |
![]() |
![]() |
|
Как определить размер картинки jpg из 1С? | ☑ | ||
---|---|---|---|---|
0
Начинающий админ
16.05.06
✎
15:59
|
Как определить размер картинки в пикселях jpg из 1С (программно)?
Предполагаю, что нужну идти путем: Объект = СоздатьОбъект("Scripting.FileSystemObject"); Картинка = Объект.OpenTextFile(ПутьККартинке); Далее можно через КодСимв(Картинка.Read(1)) получать данные из файла в байтах. А вот где именно в jpg хранятся его размеры? PS или может есть другой путь? |
|||
1
Транзистор
16.05.06
✎
16:03
|
(0)Если идти этим путем, то вот ответ на твой вопрос. Перебирая ищешь вот эти строчки. Параметр PixelXDimension количество точек по горизонтали, а PixelYDimension по вертикали.
<rdf:Description rdf:about='uuid:df87e056-c48a-11da-bf10-eb157805050c' xmlns:exif='http://ns.adobe.com/exif/1.0/'> <exif:ExifVersion>0220</exif:ExifVersion> <exif:ColorSpace>4294967295</exif:ColorSpace> <exif:PixelXDimension>1920</exif:PixelXDimension> <exif:PixelYDimension>1200</exif:PixelYDimension> </rdf:Description> |
|||
2
romix
модератор
16.05.06
✎
16:08
|
Я делал через ВК. Могу выложить...
|
|||
3
evGenius
16.05.06
✎
16:10
|
(1) Это частный случай, не всегда так.
|
|||
4
evGenius
16.05.06
✎
16:10
|
ИМХО можно только через ВК.
|
|||
5
Начинающий админ
16.05.06
✎
16:19
|
(1) Увы, не понял :( Не могу никак увидеть PixelXDimension в своих картинках (смотрю f3 в ТоталКоммандере).
(2) Если не сложно... Буду благодарен. Например сюда: anatoly_obninsk [at] mail.ru (4) Я вот думаю, неужели нет каких-нибудь байтов в начале картинки, которые бы гаранитрованно определяли размер? |
|||
6
evGenius
16.05.06
✎
16:28
|
(5) Нет таких байтов.
|
|||
7
Начинающий админ
16.05.06
✎
16:34
|
Нашел в сети вот что:
Dim imagefile,fso,image,width,height,buffer,length imagefile="image.jpg" Set fso = CreateObject("Scripting.FileSystemObject") Set image = fso.OpenTextFile(Server.MapPath(imagefile)) image.Skip(2) Do Do buffer = image.Read(1) If asc(buffer) <> 255 Then Exit Do Loop If asc(buffer) < 192 Or 195 < asc(buffer) Then buffer = image.Read(2) length = CLng(asc(mid(buffer,1,1))) * 256 + asc(mid(buffer,2,1)) image.Skip(length - 2) Else Exit Do End If Loop buffer = image.Read(7) width = asc(mid(buffer,6,1))*256 + asc(mid(buffer,7,1)) height = asc(mid(buffer,4,1))*256 + asc(mid(buffer,5,1)) Response.Write("width = " & width & ", height = " & height) image.Close Set image = Nothing Set fso = Nothing Переделал под 1С (но сто % не верно, т.к. не раскусил что такое Loop :) fso = СоздатьОбъект("Scripting.FileSystemObject"); image = fso.OpenTextFile(лПуть); image.Skip(2); Пока 1=1 Цикл Пока 1=1 Цикл buffer = image.Read(1); Если КодСимв(buffer) <> 255 Тогда Прервать; КонецЕсли; Если (КодСимв(buffer) < 192) Или (195 < КодСимв(buffer)) Тогда buffer = image.Read(2); length = СтрДлина(КодСимв(mid(buffer,1,1))) * 256 + КодСимв(mid(buffer,2,1)); image.Skip(length - 2); Иначе Прервать; КонецЕсли; buffer = image.Read(7); width = КодСимв(mid(buffer,6,1))*256 + КодСимв(mid(buffer,7,1)); height = КодСимв(mid(buffer,4,1))*256 + КодСимв(mid(buffer,5,1)); Сообщить("Ширина = " + width + ", Высота = " + height); КонецЦикла; КонецЦикла; |
|||
8
romix
модератор
16.05.06
✎
16:34
|
Выкладываю ВК: http://x-romix.narod.ru/avk.rar
(качать ЛЕВОЙ кнопкой мыши, ~143К) |
|||
9
Транзистор
16.05.06
✎
16:35
|
Оперативно работаете.
|
|||
10
airyashov
16.05.06
✎
16:36
|
Do
Loop цикл VB |
|||
11
Начинающий админ
16.05.06
✎
16:41
|
(8) Спасибо. Буду разбираться.
(10) А в терминах 1С это что? :) |
|||
12
romix
модератор
16.05.06
✎
16:46
|
(+8) Если че, там исходник приложен на Дельфи.
(11-2) Пока 1=1 Цикл КонецЦикла |
|||
13
smaharbA
16.05.06
✎
16:52
|
Кашмар!
|
|||
14
Начинающий админ
16.05.06
✎
16:55
|
(12) Ну я так и понял. см: (7)
(13) Уважаемый, smaharbA подскажи вечно начинающему как можно реализовать сабж наиболее быстрым и простым способом? :) |
|||
15
smaharbA
16.05.06
✎
16:57
|
//*******************************************
Процедура Сформировать() Имя=""; Каталог=""; Если ФС.ВыбратьФайлКартинки(0,Имя,Каталог)=1 Тогда fso=createobject("scripting.filesystemobject"); Shell = CreateObject("Shell.Application"); Folder = Shell.Namespace(Каталог); Сообщить(Folder.GetDetailsOf(Folder.Items().item(Имя), 26)); КонецЕсли; КонецПроцедуры |
|||
16
Начинающий админ
16.05.06
✎
17:03
|
(15) вроде пустую строку возвращает :(
PS убегаю, завтра буду доразбираться... |
|||
17
smaharbA
16.05.06
✎
17:05
|
Сообщить(Folder.GetDetailsOf(Folder.Items().item(Имя), 26));
Сообщить(Folder.GetDetailsOf(Folder.Items().item(Имя), 27)); Сообщить(Folder.GetDetailsOf(Folder.Items().item(Имя), 28)); |
|||
18
Директор PR отдела
16.05.06
✎
17:07
|
КАк всегда пришёл Звездатый Эксперт Олежка и всех заляпал.
|
|||
19
Новичок541289
16.05.06
✎
17:08
|
По моему этого никак не сделать!
|
|||
20
smaharbA
16.05.06
✎
17:22
|
(19) Да ну ?
|
|||
21
Хванчкара
16.05.06
✎
17:23
|
(15) Все работает
|
|||
22
Хванчкара
16.05.06
✎
17:25
|
(20) гденить лежит chm по классам scripting.... и т.п. чтоб почитать
|
|||
23
mrkorn
16.05.06
✎
17:30
|
(22)не знаю. мож пойдет
http://www.script-coding.info/ |
|||
24
smaharbA
16.05.06
✎
17:32
|
(22) http://www.microsoft.com/technet/scriptcenter/compmgmt/scrcm58.asp
http://www.microsoft.com/technet/scriptcenter/scrptfaq.asp http://www.microsoft.com/technet/scriptcenter/scrguide/sagsas_overview.asp наверное лучшего не найти, ну еще на www.networkdoc.ru для начала кое-что |
|||
25
smaharbA
16.05.06
✎
17:32
|
(23) Да там много интересного материала есть
|
|||
26
Хванчкара
16.05.06
✎
17:36
|
Спасибо
|
|||
27
Vippi
16.05.06
✎
23:44
|
(15) Преклоняюсь. Молодец.
А я, дурак, в свое время ВК слепил на эту тему. |
|||
28
insider
16.05.06
✎
23:50
|
имхо в БЗ
и вообще пора собрание сочинений smaharbA вынести в отдельный том :) |
|||
29
Vippi
16.05.06
✎
23:55
|
(28) Точно.
И назначить технического писателя для упорядочивания мыслей ;) Выпивающий меньше живет, но больше видит. Олег, прости, это и про меня можно сказать :)) |
|||
30
insider
16.05.06
✎
23:57
|
(29) все мы там будем :) если б еще кол-во выпитого было пропорционально таланту, точнее талант выпитому... но увы :)
|
|||
31
romix
модератор
17.05.06
✎
01:18
|
(27) Не ты один. :-)
Добавлено в БЗ. |
|||
32
Начинающий админ
17.05.06
✎
08:22
|
(17) Для 26,27... выводит пустую строку, есть данные только для:
1: 1 473 КБ 2: Рисунок JPEG 3: 16.05.2006 7:20 4: A 5: 6: 17.05.2006 8:02 7: 17.05.2006 8:03 8: Администраторы далее пустые строки :( Подскажи, где копать? С чем может быть связано? PS речь о win2000 sp4 в citrix, локально на xp все нормально (права администратора всюду) |
|||
33
skunk
17.05.06
✎
08:25
|
||||
34
Начинающий админ
17.05.06
✎
08:44
|
(33) Круто!
однако размер картинки так и не определяет :(, пишет: "Размер картинки неизвестен..." |
|||
35
skunk
17.05.06
✎
08:46
|
у тебя ХР без паков?
|
|||
36
Начинающий админ
17.05.06
✎
08:47
|
(35) xp sp2, там все ОК, не определяет на win2000 sp4 :(
|
|||
37
skunk
17.05.06
✎
08:48
|
(36)на 2000 не смотрел... думаю тебе надо whs патчить
|
|||
38
skunk
17.05.06
✎
08:51
|
вот это скачивай и устанавливай
http://www.microsoft.com/downloads/details.aspx?FamilyID=c717d943-7e4b-4622-86eb-95a22b832caa&DisplayLang=en |
|||
39
Начинающий админ
17.05.06
✎
08:52
|
(37) А это как? :)
|
|||
40
Начинающий админ
17.05.06
✎
08:53
|
(38) спасибо
|
|||
41
skunk
17.05.06
✎
08:57
|
не за что
а вот тоже самое... только по китайский http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=c717d943-7e4b-4622-86eb-95a22b832caa |
|||
42
smaharbA
17.05.06
✎
09:17
|
//*******************************************
Процедура Сформировать() Имя=""; Каталог=""; Если ФС.ВыбратьФайлКартинки(0,Имя,Каталог)=1 Тогда ИЕ=СоздатьОбъект("InternetExplorer.Application"); ИЕ.Navigate("about:blank"); Док=ИЕ.document; Док.body.innerHTML="<img id=img src=file://"+Каталог+Имя+">"; Сообщить(Док.getElementById("img").offsetHeight); Сообщить(Док.getElementById("img").offsetWidth); КонецЕсли; КонецПроцедуры |
|||
43
smaharbA
17.05.06
✎
09:50
|
//*******************************************
Процедура Сформировать() Имя=""; Каталог=""; Если ФС.ВыбратьФайлКартинки(0,Имя,Каталог)=1 Тогда ИЕ=СоздатьОбъект("InternetExplorer.Application"); ИЕ.Fullscreen=-1; ИЕ.Navigate(Каталог+Имя); IMG=ИЕ.document.getElementsByTagName("IMG").item(0); Сообщить(IMG.Height); Сообщить(IMG.Width); КонецЕсли; КонецПроцедуры |
|||
44
skunk
17.05.06
✎
09:51
|
(42)загрузи картинку больше чем ИЕ
|
|||
45
smaharbA
17.05.06
✎
09:52
|
(44) Это если автоподгон, но если стиль поставить на IMG то пофих
|
|||
46
smaharbA
17.05.06
✎
09:54
|
+(45) кстати в варианте (42) безразницы
|
|||
47
skunk
17.05.06
✎
09:54
|
(45)это ты знаешь... по дефолту он стоит в автоподгон... так что по дефолту надо либо отключать его программно... либо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |