PNG – вынимаем параметры изображения

#АнатомияФункций – BinaryFormat



Всем ‎привет!‏ ‎

Давно ‎не ‎ковырялись ‎в ‎бинарке,‏ ‎а ‎тут‏ ‎в‏ ‎чат‏ ‎пришли ‎с ‎задачкой ‎про‏ ‎png.

Конкретно нужно из бинарного содержимого вынуть информацию о ширине и высоте изображения.

Ну, собственно, дело не хитрое – рассмотрим варианты.

Через Binary.Range

let

f=(x)=>{BinaryFormat.UnsignedInteger32(Binary.Range(x,16,4)),BinaryFormat.UnsignedInteger32(Binary.Range(x,20,4))},



from = Folder.Files("C:\Users\muzyk\Desktop\PQ КУРС МАТЕРИАЛЫ"),

filtr = Table.SelectRows(from,(x)=>x[Extension]=".png")[[Name],[Content]],

to = Table.SplitColumn(filtr,"Content",f,{"Width","Height"})

in

to


Через BinaryFormat.List

let

f=(x)=>List.Skip(BinaryFormat.List(BinaryFormat.UnsignedInteger32,6)(x),4),



from = Folder.Files("C:\Users\muzyk\Desktop\PQ КУРС МАТЕРИАЛЫ"),

filtr = Table.SelectRows(from,(x)=>x[Extension]=".png")[[Name],[Content]],

to = Table.SplitColumn(filtr,"Content",f,{"Width","Height"})

in

to


Через BinaryFormat.Record

let

f=BinaryFormat.Record(

[skip=BinaryFormat.Binary(16),

Width=BinaryFormat.UnsignedInteger32,

Height=BinaryFormat.UnsignedInteger32]),



from = Folder.Files("C:\Users\muzyk\Desktop\PQ КУРС МАТЕРИАЛЫ"),

filtr = Table.SelectRows(from,(x)=>x[Extension]=".png")[[Name],[Content]],

tr = Table.TransformColumns(filtr,{"Content",f}),

to = Table.ExpandRecordColumn(tr,"Content",{"Width","Height"})

in

to


Ну а что тут к чему, и почему так, смотрим

С исходниками на спонсоре

На рутубе

На дзене





Лайк, коммент, подписка приветствуются )))



Надеюсь, было полезно.

Всех благ!

@buchlotnik