Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Бинаризация картинки средствами 1С

Бинаризация картинки средствами 1С
Я
   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)

Из того что пока понял. Открываем поток, читаем попиксельно, понимаем цвет пикселя и пишем в новую картинку.
Оказалось, что я вообще не до конца понимаю, что делаю.
В общем мало ли кто уже делал что то подобное. Буду рад любым советам.
   pechkin
 
1 - 12.01.22 - 16:49
   DeoxyS
 
2 - 12.01.22 - 16:51
(1) ее и изучаю как раз, но очень уж тяжело пока для понимая она. ) 1. Она печатает не так как заявлено. 2. Она очень долгая, картинку может жевать до нескольких минут. Тут как раз ищу альтернативные способы.
   Kigo_Kigo
 
3 - 12.01.22 - 16:54
Так насколько я помню, там драйвер сам может это сделать, дать команду драйверу и путь к картинке он ее сам отпечатет
   pechkin
 
4 - 12.01.22 - 16:57
как я понял бинари - это те же байты что и в асци, только вместо кодов, символы с кодами
   arsik
 
5 - 12.01.22 - 16:59
в атоле реализовано так. Может поможет.
    БинарныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СокрЛП(ПараметрыПечатиШК.ШтрихКод));
    ДлинаБинарныхДаных = БинарныеДанные.Размер();
    мБинарныхДанных = РазделитьДвоичныеДанные(БинарныеДанные,64);
    счетчик = 0;
    для Каждого ЧастьДанных из мБинарныхДанных Цикл
        Объект.Password = Пароль;
        Объект.BlockType = 0;
        Объект.BlockNumber = Счетчик;
        Объект.BlockDataHex = ПолучитьHexСтрокуИзДвоичныхДанных(ЧастьДанных);
        //Объект.BlockDataHex = ЧастьДанных;

        Объект.LoadBlockData();        
        Счетчик = Счетчик+1;
    КонецЦикла;

   H A D G E H O G s
 
6 - 12.01.22 - 16:59
(0) Замерь производительность, вдруг потери времени не на отправки zpl кода на принтер
   Garykom
 
7 - 12.01.22 - 16:59
микросервисы уже были? https://github.com/SimonWaldherr/zplgfa
   arsik
 
8 - 12.01.22 - 17:02
+ (5)  Вру. Не в атоле, а в штрихе.
   DeoxyS
 
9 - 12.01.22 - 17:06
(8) это с ККТ она так работает как я понял, не с принтером.
   DeoxyS
 
10 - 12.01.22 - 17:09
(6) ПрочитатьВБуферДвоичныхДанных вот эта функция отжирает 90% времени
   pechkin
 
11 - 12.01.22 - 17:10
(10) у тебя сколько мегабайт картинка?
   DeoxyS
 
12 - 12.01.22 - 17:11
(11) 3Kb :)
   mistеr
 
13 - 12.01.22 - 17:14
(0) Зачем непременно "средствами 1С"? Откуда такая мания вырезать гланды через ж...

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

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

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

А в бинарном варианте просто берешь готовые байты и пихаешь в зебру.
   pechkin
 
38 - 12.01.22 - 20:02
(20) а по 3 байта за раз хотя бы нельзя читать?
   arsik
 
39 - 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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.