Имя: Пароль:
1C
1С v8
Бинаризация картинки средствами 1С
0 DeoxyS
 
12.01.22
16:46
Требуется перевести картинку в бинарный код в 1С и напечатать на принтере средствами ZPL. Застрял: не могу понять как бинаризировать картинку.
Может кто занимался уже этим?
есть гайд от https://support.zebra.com/cpws/docs/zpl/zpl_manual.pdf
ZPL требуется для печати:
A = ASCII hexadecimal (follows the format for other download
commands)
ИЛИ
B = binary (data sent after the c parameter is strictly binary)

Из того что пока понял. Открываем поток, читаем попиксельно, понимаем цвет пикселя и пишем в новую картинку.
Оказалось, что я вообще не до конца понимаю, что делаю.
В общем мало ли кто уже делал что то подобное. Буду рад любым советам.
1 pechkin
 
12.01.22
16:49
2 DeoxyS
 
12.01.22
16:51
(1) ее и изучаю как раз, но очень уж тяжело пока для понимая она. ) 1. Она печатает не так как заявлено. 2. Она очень долгая, картинку может жевать до нескольких минут. Тут как раз ищу альтернативные способы.
3 Kigo_Kigo
 
12.01.22
16:54
Так насколько я помню, там драйвер сам может это сделать, дать команду драйверу и путь к картинке он ее сам отпечатет
4 pechkin
 
12.01.22
16:57
как я понял бинари - это те же байты что и в асци, только вместо кодов, символы с кодами
5 arsik
 
гуру
12.01.22
16:59
в атоле реализовано так. Может поможет.
    БинарныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СокрЛП(ПараметрыПечатиШК.ШтрихКод));
    ДлинаБинарныхДаных = БинарныеДанные.Размер();
    мБинарныхДанных = РазделитьДвоичныеДанные(БинарныеДанные,64);
    счетчик = 0;
    для Каждого ЧастьДанных из мБинарныхДанных Цикл
        Объект.Password = Пароль;
        Объект.BlockType = 0;
        Объект.BlockNumber = Счетчик;
        Объект.BlockDataHex = ПолучитьHexСтрокуИзДвоичныхДанных(ЧастьДанных);
        //Объект.BlockDataHex = ЧастьДанных;
        Объект.LoadBlockData();        
        Счетчик = Счетчик+1;
    КонецЦикла;
6 H A D G E H O G s
 
12.01.22
16:59
(0) Замерь производительность, вдруг потери времени не на отправки zpl кода на принтер
7 Garykom
 
гуру
12.01.22
16:59
микросервисы уже были? https://github.com/SimonWaldherr/zplgfa
8 arsik
 
гуру
12.01.22
17:02
+ (5)  Вру. Не в атоле, а в штрихе.
9 DeoxyS
 
12.01.22
17:06
(8) это с ККТ она так работает как я понял, не с принтером.
10 DeoxyS
 
12.01.22
17:09
(6) ПрочитатьВБуферДвоичныхДанных вот эта функция отжирает 90% времени
11 pechkin
 
12.01.22
17:10
(10) у тебя сколько мегабайт картинка?
12 DeoxyS
 
12.01.22
17:11
(11) 3Kb :)
13 mistеr
 
12.01.22
17:14
(0) Зачем непременно "средствами 1С"? Откуда такая мания вырезать гланды через ж...

Почему бы не использовать для этого проверенные утилиты, вроде ImageMagick. Можно в паре с какой-нибудь COM оберткой к нему.
14 H A D G E H O G s
 
12.01.22
17:15
Кто то что то делает не так.
15 pechkin
 
12.01.22
17:15
(12)  приведи код
16 H A D G E H O G s
 
12.01.22
17:15
(13) Это и есть гланды, всякие внешние приблуды.
17 DeoxyS
 
12.01.22
17:16
(13) наверно так и придется...
18 DeoxyS
 
12.01.22
17:16
(15) обработки с инфостарта?
19 H A D G E H O G s
 
12.01.22
17:20
(18) Скриншота Тормозящего кода с замером производительности
20 DeoxyS
 
12.01.22
17:24
(19) думаю это мало чем поможет. https://prnt.sc/26ctjwj
21 H A D G E H O G s
 
12.01.22
17:28
(20) Это че за дичь?
22 Garykom
 
гуру
12.01.22
17:28
(20) ыыы
короче фоновые используй и в кучу потоков своей дичью грузи
23 Базис
 
naïve
12.01.22
17:29
Фотошоп из 1С получается довольно посредственный.
Тебе точно надо изменять картинку? Просто вставить картинку в макет, чтобы драйвер принтера сам её перевёл в монохром, ещё и предоставляя пользователю выбор dithering (не помню точный перевод, но разным картинкам нужен разный).
24 Garykom
 
гуру
12.01.22
17:29
(23) ZPL а не вин-драйвер принтера
25 Garykom
 
гуру
12.01.22
17:29
(24)+ по сути там ASCII текстовый файл в порт принтера отправляется
26 Garykom
 
гуру
12.01.22
17:30
(25)+ вроде бы последние вариации ZPL уже умеют вставки Base64 но не уверен
27 Базис
 
naïve
12.01.22
17:32
(24) Я знаю этот язык, ЕАС на нём писал для скорости. Но цель (0) мне кажется непонятной.
28 DeoxyS
 
12.01.22
17:36
(27) В ZPL есть команда GFA, с помощью нее можно отправить картинку "текстом" в коде. Цель перевести картинку в текст так, чтобы этот текст поняла команда ZPL :)
29 Garykom
 
гуру
12.01.22
17:39
(28) ну дык сделай exe-шник на (7) и конверти картинки в код
30 Garykom
 
гуру
12.01.22
17:40
(29)+ заодно туда защиту своей нетленки зашьешь и потом себе зарплату повысишь
31 Garykom
 
гуру
12.01.22
17:41
(30)+ хотя в крупняке (рарус, бит и т.д.) принято ВК делать по любому поводу и лицензии туда вставлять ))
32 H A D G E H O G s
 
12.01.22
17:45
(28) Что мешает использовать
ПолучитьHexСтрокуИзДвоичныхДанных()
?
33 mistеr
 
12.01.22
17:48
(28) Качнул я этот мануал ради интереса. Ты, оказывается, и термин "бинаризация" неверно использовал. Речь идет просто о кодировании, к обработке изображений никакого отношения не имеет.

Короче, нужный код 100% должен быть где-то в недрах БПО.
34 Garykom
 
гуру
12.01.22
17:52
(33) не факт
понятно что монохромная картинка и просто hex
35 DeoxyS
 
12.01.22
17:55
(32) не хочет кушать это ZPL http://labelary.com/viewer.html
36 mistеr
 
12.01.22
18:00
(34) Блин, а ведь верно. Вот примерчик: https://support.zebra.com/cpws/docs/zpl/GFcommand.pdf

Но все равно, уверен, что в БПО все есть.
37 mistеr
 
12.01.22
18:27
Кстати, ImageMagick поддерживает формат PBM, в т.ч. в текстовом варианте, типа "1 0 0 1 0 0 1 1 0". Можно использовать как промежуточный.

А в бинарном варианте просто берешь готовые байты и пихаешь в зебру.
38 pechkin
 
12.01.22
20:02
(20) а по 3 байта за раз хотя бы нельзя читать?
39 arsik
 
гуру
13.01.22
00:11
У меня например все получилось
Можно проверить тут http://labelary.com/viewer.html

^XA

~DYR:TEST1.PNG,P,P,614,20,89504E470D0A1A0A0000000D494844520000009E0000004801030000003D2CDE0A000000017352474200AECE1CE90000000467414D410000B18F0BFC610500000006504C5445000000FFFFFFA5D99FDD000000097048597300000EC400000EC401952B0E1B000001E94944415438CBC5D4318EDB301005501B5BA82472025D21371072AB74DC850B95BE520415BC86185E80EA54109CFC3F435976AC225D7601597E10C5993F922FF2FE57FE3F96E15F713B45AFE78B7D34CCA72832BE621D64319C09EB8ED33BF6FCF68E901BCEC74DF260280EFF9270EE807D9C15EF1518452AB19B0CC7D2EBAD4ABF895CAF8633BBCC4C00F8D9FDF2C4890DE17BF1382C6E515C163930F7CB40CC3F0C37229AED89DB8705950D7F2B96CE728EA2981459263159AEC9E99544349BB015B1D37B72B974C843679546DDBD6110A488AC82D6A991DD9015EE014CC4188949EE22084142D4DE1743ECC72DC3420C59916B7131BF323A2D2F32400E256C9EC96B2599C780935080D5F11AC93FBD8D2E948183D33EB7EFDE26152A10CBB4F96FA29392B1F640AFF7AFD736742786BCBF7CD84355779CAC4FCD1FE5BA724195DAE7A7E58F2DEE403910ABB885E2FA84B8382872F0BA3BD666D9111D56D6690FB021FBD48071888A565B7B97F4019ECB65D50135746C24198EFBBB74E729F04B34C71DDD33EA4CECA96E38EF38B208E04D47695D31F607A2E2A9A1E70C2FC1F0CB7033140BF76698E540AF73C28EC4D5108B7AC5B43E636D180FB4A088E9058733B49F0ABEC307B61F9CF505AD75596F479D0FD497E281B1A17BC6D4502BFB1B8733F467C883943FC6CB041C4B8C880D0000000049454E44AE426082

^FO50,250^IMR:TEST1.PNG^FS

^FX Top section with logo, name and address.
^CF0,60
^FO50,50^GB100,100,100^FS
^FO75,75^FR^GB100,100,100^FS
^FO93,93^GB40,40,40^FS
^FO220,50^FDIntershipping, Inc.^FS
^CF0,30
^FO220,115^FD1000 Shipping Lane^FS
^FO220,155^FDShelbyville TN 38102^FS
^FO220,195^FDUnited States (USA)^FS
^FO50,250^GB700,3,3^FS

^FX Second section with recipient address and permit information.
^CFA,30

^FO50,340^FD100 Main Street^FS
^FO50,380^FDSpringfield TN 39021^FS
^FO50,420^FDUnited States (USA)^FS
^CFA,15
^FO600,300^GB150,150,3^FS
^FO638,340^FDPermit^FS
^FO638,390^FD123456^FS
^FO50,500^GB700,3,3^FS

^FX Third section with bar code.
^BY5,2,270
^FO100,550^BC^FD12345678^FS

^FX Fourth section (the two boxes on the bottom).
^FO50,900^GB700,250,3^FS
^FO400,900^GB3,250,3^FS
^CF0,40
^FO100,960^FDCtr. X34B-1^FS
^FO100,1010^FDREF1 F00B47^FS
^FO100,1060^FDREF2 BL4H8^FS
^CF0,190
^FO470,955^FDCA^FS

^XZ
40 mistеr
 
13.01.22
11:01
(39) А где у тебя ^GF?
41 arsik
 
гуру
13.01.22
11:29
(40) А для чего ^GF? Там мутная схема с GF.
Проще так:
~DY - в память загрузил
^FO50,250^IMR:TEST1.PNG^FS - вывел на форму
Ну и удалить из памяти надо в конце инструкций.
^IDR:TEST1.PNG^FS
42 arsik
 
гуру
13.01.22
11:37
Мне кажется через GF можно только графику в формате GRF передавать.
43 DeoxyS
 
13.01.22
11:56
(39) Благодарю, я чет закциклился на GFA, и дальше методы глянуть уже не догадался )
44 DeoxyS
 
13.01.22
12:00
(39) Это через получитьHEXстрокуИзДвоичныхДанных?
45 arsik
 
гуру
13.01.22
12:05
46 DeoxyS
 
13.01.22
12:44
(45) Спасибо