1 (изменено: Maxfashko, 2012-12-28 20:08:03)

Тема: AHK: Определение размеров изображения в PSD/PSB-файлах

Здравствуйте.
Как возможно определить высоту и ширину фото в папке?
Либо можно пойти альтернативным путём. Измерить размер нужного окна, и если true то делаем что-то.

2

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Maxfashko, ознакомьтесь с этой темой, добавьте префикс языка в заголовок темы.

3

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Знаком, спасибо.

4

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Можно через gui

gui,add,picture,hwndmypic,c:\kartinka.jpg
controlgetpos,,,width,height,,ahk_id %mypic%
msgbox %width%  %height%

5

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

fullPath:="c:\Downloads\progress.gif"
oImageFile:=ComObjCreate("WIA.ImageFile"), oImageFile.LoadFile(fullPath)

MsgBox, 262208
      , % "format:    RGB"(oImageFile.IsAlphaPixelFormat ? "A":"")
      , % "width:`t"oImageFile.Width "`nheight:`t"oImageFile.Height
      . (oImageFile.IsAnimated ? "`nframes:`t"oImageFile.FrameCount:"")

Источник.

6

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Malcev пишет:

Можно через gui

gui,add,picture,hwndmypic,c:\kartinka.jpg
controlgetpos,,,width,height,,ahk_id %mypic%
msgbox %width%  %height%

Да можно, способ прост и хорош,но.....       
Не читает psd

7

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Grey пишет:
fullPath:="c:\Downloads\progress.gif"
oImageFile:=ComObjCreate("WIA.ImageFile"), oImageFile.LoadFile(fullPath)

MsgBox, 262208
      , % "format:    RGB"(oImageFile.IsAlphaPixelFormat ? "A":"")
      , % "width:`t"oImageFile.Width "`nheight:`t"oImageFile.Height
      . (oImageFile.IsAnimated ? "`nframes:`t"oImageFile.FrameCount:"")

Источник.


Примерно ясно. В документации вычитал это

The Windows Image Acquisition Library v2.0 is only designed to support the PNG, BMP, JPG, GIF and TIFF image formats.  It should not be relied upon to support other formats, though they may appear to be supported depending on system configuration.

Мне нужно считывать psd

8

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

В общем столкнулся с этой проблемой:
error: 0x8....... invalid class string

перерыл кучу форумов на англ. только там ничего внятного не нашел=(

пробовал подключать Com через #include......безуспешно

9

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

С psd не выйдет. Это специальный фотошоповский файл, Windows его не читает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

10

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Windows не читает, АНК читает
Простой скрипт "без рюшек", берет данные из заголовка файлов PSD, и, скорее всего, PSB
Показывает размер включительно до 65535 пикселей по Х или Y

psd := "c:/tmp/test.psd"
file := FileOpen(psd, 0x100)
File.Seek(14)
Y := file.ReadUInt() >> 16
Y := ((Y & 0xFF)  << 8)  | (Y >> 8)
X := file.ReadUInt() >> 16
X := ((X & 0xFF)  << 8)  | (X >> 8)
MsgBox % "Ширина - " . X . "`nВысота - " . Y
return

11

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Показывает размер включительно до 65535 пикселей по Х или Y

А если больше?

12

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Больше, думаю, редко используется, это ведь около 4295 Мп.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

13

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Редко. Но бывает. Мне интересен код, который будет уметь работать с любыми psd.

14

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Видимо, всё же, не бывает.

A PSD file has a maximum height and width of 30,000 pixels...

Irbis, а откуда информация, если не секрет?

...
File.Seek(14)
...

upd
А, уже нашёл.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15 (изменено: Irbis, 2012-12-29 20:47:27)

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Да я, собственно, с сабжем познакомился, только открыв тему.
Сразу почему-то пришла мысль извлечь информацию из заголовка - больше времени ушло на разбирательство с big-endian порядком байтов, чем с поиском информации о формате PSD. (Кстати, мне самому не нравится такое приведение к нормальному виду, наверняка можно улучшить)
alexii, для работы с файлами PSB шириной/высотой до 300000 пикселей переделка скрипта будет минимальна, надо просто не отсекать старшую половину оператором " >> 16 ", а тоже обрабатывать.

16

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Irbis, сделаете?

17 (изменено: Irbis, 2012-12-30 00:31:03)

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Следующий код должен работать с любым допустимым разрешением > 65К пикселей по обоим направлениям.

psd := "d:\temp\1.psd"
file := FileOpen(psd, 0x100)
File.Seek(14)
Y := Swap(file.ReadUInt())
X := Swap(file.ReadUInt())
File.Close()
MsgBox % "Ширина - " . X . "`nВысота - " . Y
return

Swap(N)
{
   Return ((0xFF0000 & N)  >> 8)
         |((0xFF000000 & N) >> 24)
         |((0xFF00 & N)  << 8)
         |((0xFF & N) << 24)
}

18 (изменено: teadrinker, 2012-12-30 01:20:30)

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Или так:

psb := "C:\Users\User\Desktop\Untitled-1.psb"
file := FileOpen(psb, 0x100)
file.Seek(14)

W := H := 0
Loop 4
   H := (H << 8)|file.ReadUChar()

Loop 4
   W := (W << 8)|file.ReadUChar()

file.Close()
MsgBox % "Ширина - " . W . "`nВысота - " . H
return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

19 (изменено: Irbis, 2012-12-30 00:47:57)

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

teadrinker, по одной им известной логике, создатели формата первым в заголовок поместили высоту изображения (Н)

20

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Хорошо, что хоть спецификацию открыли . В русской WIKI:

Недостатки формата
...
    Закрытые спецификации, что мешает полноценной поддержке в других программах.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

21 (изменено: Irbis, 2012-12-30 01:18:16)

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Я к тому написал, что пример из поста #18, при всех его несомненных достоинствах, выдает W<->H

22

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

А, да, точно! Отредактирую.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

23

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Существует WinApi-функция для инвертирования порядка байтов 32-битного числа:

psb := "C:\Users\User\Desktop\Untitled-1.psb"
file := FileOpen(psb, 0x100)
file.Seek(14)

H := DllCall("Ws2_32\ntohl", UInt, file.ReadUInt(), UInt)
W := DllCall("Ws2_32\ntohl", UInt, file.ReadUInt(), UInt)
file.Close()

MsgBox % "Ширина - " . W . "`nВысота - " . H
return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

24

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Изменил название темы на более подходящее.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

25

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Как насчёт Коллекции?

26

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Добавил.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

27

Re: AHK: Определение размеров изображения в PSD/PSB-файлах

Благодарствую .