Что нового

[Криптография] Получение ширины и высоты из HEX для jpg сохраненного в Adobe Photoshop

InfectedShade

Новичок
Сообщения
6
Репутация
0
Здравствуйте!
Раньше всегда обходился поиском по форуму, иногда и по английскому, но тут совершенно не разберусь.

Мне тут захотелось повыдергивать картинки с интернета отсеивая их по размерам, с простым скачивание их с таких сайтов я уже разобрался давно.

Суть проблемы состоит в том, что у меня не получается получить нормальный HEX к картинкам сохраненным из Adobe Photoshop (на сколько я это понимаю, может и к каким нибудь другим не получится так подобраться, но на данный момент я именно с этими столкнулся)
Не чего особо не мудрил и воспользовался тем что нашел.

Код:
#include <GUIConstantsEx.au3>
$mainwindow = GUICreate("Jpg Hex", 700, 450)
$EditURL = GUICtrlCreateEdit("", 5, 10, 690, 20, "0x0080")
$EditHex = GUICtrlCreateEdit("", 5, 35, 690, 350, "0x0040")
$GetHex = GUICtrlCreateButton("Получить HEX", 300, 390, 100, 50)
GUISetState()
While 1
	$msg = GUIGetMsg()
	Select
    Case $msg = $GUI_EVENT_CLOSE
		Exit
    Case $msg = $GetHex
        $ImageURL = GUICtrlRead($EditURL)
        $ImageHex = StringMid(InetRead($ImageURL), 1, 2000)
        GUICtrlSetData($EditHex, $ImageHex)
    EndSelect
WEnd


Для первой картинки вот ее адрес
pic1

HEX получаю нормальный, при этом в HEX редакторе 010 Editor ни каких упоминаний о фотошопе нету.
Нужная мне строка и там и там отображается верно
Код:
FFC0 0011 08 05C9 0817 03011100021101031101
05С9 - высота
0817 - ширина

Но вот мы натыкаемся на картинку сохраненную средствами фотошопа, и тут я без понятия совсем что делать, ладно бы какой нибудь сдвиг куда либо был, так нет же, совсем другие данные почему то.
Ссылка на картинку
pic2

Так выглядят данные полученyые с помощью AutoIt
Код:
FFC0 0011 08 0080 00A0 03012200021101031101

Так выглядят данные полученные с помощью HEX редактора
Код:
FFC0 0011 08 0546 0698 03011100021101031101

Собственно вопрос тут в следующем, можно ли как то корректно получить HEX к jpg файлу который был сохранен с помощью фотошопа?
Ну и другие вопросы вдогонку
1. Та маленькая программа приведенная мною вначале полностью выкачивает данные по картинке или все таки не до конца, а указанные там 2000 символов? Просто по ощущениям она как то быстрее выводит на просмотр если лишнее обрезано.
2. Если она все таки не полностью скачивает, есть какие нибудь возможности по другому получить данные о высоте и ширине картинки не скачивая ее на компьютер?

Просто если она ее скачивает не полностью, я собираю данные о картинках в массив, а потому буду уже поочередно все закачивать и распихивать по нужным папка, но если она все таки полностью ее качает, то думаю можно обойтись и перемещением в нужную папку из временной.
Тут тогда вопрос такой
Как лучше получить ширину и высоту скачанной картинки?

Правда бы хотелось все таки немного разобраться с HEX от фотошопа.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$ImageHex = StringMid(InetRead($ImageURL), 1, 2000)
Здесь полностью получаются данные из указанного $ImageURL, от коих отрезается всё кроме символов с 1 по 2000.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
все нормально с твоим кодом. вторая картинка имеет размеры 1500х1200, и именно это показывает маркер FFC0
Код:
FFC0 0011 08 04B0 05DC
 
Автор
I

InfectedShade

Новичок
Сообщения
6
Репутация
0
Здесь полностью получаются данные из указанного $ImageURL, от коих отрезается всё кроме символов с 1 по 2000.
Я так и предполагал, но хотелось уточнить :smile:

все нормально с твоим кодом. вторая картинка имеет размеры 1500х1200
Все бы хорошо, только размер этой картинки 1688x1350

Вообще на сколько я понял из мною сегодня прочитанного FFC0 это просто маркер показывающий начало тех данных в которых хранится нужная мне информация
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
InfectedShade [?]
Все бы хорошо, только размер этой картинки 1688x1350
это очень странно, т.к. я сохранил картинку на диск и проверил размер. возможно сама страница масштабирует картинку в зависимости от разрешения экрана. а суть моего сообщения была в том, что Photoshop не вносит в формат какие-то свои данные и в маркерах хранятся нужные значения.


Добавлено:
Сообщение автоматически объединено:

InfectedShade [?]
Вообще на сколько я понял из мною сегодня прочитанного FFC0 это просто маркер показывающий начало тех данных в которых хранится нужная мне информация
да, так и есть.
 
Автор
I

InfectedShade

Новичок
Сообщения
6
Репутация
0
Сам походу дела нашел ответ на свой же главный вопрос.

Да, в действительности виноват именно фотошоп, читая сегодня много всего про формат jpg я как то из виду упустил то что фотошоп в начале помещает данные о так называемой превьюшке, полазив основательно я нашел вторую пару FFC0

Потому у меня немного другая просьба появилась, у меня плохо с регулярными выражениями, сейчас это выглядит так
Код:
$aStr = StringRegExp($HexImage, '(?is)FFC0(.{14})', 3)

Оно естественно цепляет только один набор 14 знаков, до второго уже не доходит, как его поменять что бы он и второе захватил ну или сколько он их там найдет.

Kaster, спасибо за помощь, но оказывается сам не доглядел, но и фотошоп тоже лишние данные пихает и достаточно много, а по поводу картинки вот ссылка на пост именно на сайте, там тоже написано какого разрешения картинка, а полную ссылку я беру из элемента "View larger version" написанного желтым цветом.


Добавлено:
Сообщение автоматически объединено:

Только глупостями занимаюсь, раз я все равно получаю все данные со страницы HTML то и размер от туда же возьму, но все же если не сложно я бы посмотрел бы как выглядит ответ на мой последний вопрос :smile:

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

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
InfectedShade
это очень странно, если мы говорим об одном и том же файле по одной и той же ссылке а именно вот этот файл pic2, т.к. я скачал посмотрел – всего один маркер, и там размер 1500x1200. покажи файл где есть еще и превью. и потом, работать с двоичными данными как с текстом не самая лучшая практика. я вижу два оптимальных варианта
1. парсить маркеры самому
2. использовать библиотеки для работы с графическими файлами. у меня на уме две с половиной таких библиотек
1) Free Image (ищи на форуме)
2) GflAx (ищи в гугле, примеры на форуме)
2.5) встроенные функции GDI+ для AutoIt вроде умеет работать с изображеними и считывать размер и прочее, но не уверен.
 
Автор
I

InfectedShade

Новичок
Сообщения
6
Репутация
0
Kaster
Файл для форума большой, потому я загрузил его сюда, потом от туда уже скачал и проверил, у меня все осталось точно так же как и в оригинале который туда заливал, собственно что мне про нее выдает 010 Editor


Первый маркер, он же выделен относится к описанию превью, а вот из второго маркера уже можно получить реальные размеры картинки, картинка все та же самая, в общем то думаю мне не сложно еще будет откопать несколько таких на этом сайте.

А из ситуации я уже вышел описанным выше способом, так как на сайте присутствует информация о размерах, я просто взял ее от туда, так как я все равно гружу HTML для получения той же ссылки на Full картинку и составления имени файла из тегов к картинке.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
InfectedShade
это однозначно два разных файла. этот я качал по ссылке которую ты привел.
OXS2bS2X.png


и теперь действительно видно, что в последнем приведенном тобой файле несколько маркеров. при желании можно вытащить все размеры просто парся эти самые маркеры. после маркера как правило следует размер содержимого, поэтому отыскать нужный не сложно. однако, если решил проблему то и ладно :smile:
 
Верх