Lire l'add-on EAN-2 et proposer le numéro de la revue scannée
Découverte à la mesure : l'EAN-2 est DÉSACTIVÉ par défaut dans zbar. Il ne suffisait donc pas de cesser de le filtrer — il n'était jamais produit. Vérifié sur un EAN-13 + EAN-2 rendus en canvas : un symbole par défaut, deux après setConfig(ZBAR_EAN2, ZBAR_CFG_ENABLE, 1). L'EAN-5 reste désactivé : il porte un prix, pas un numéro. Ce qui reste non vérifié — que les magazines réels y mettent bien leur numéro de parution — est dit à l'utilisateur : le numéro est proposé dans un champ modifiable, sous une invitation à le comparer à la couverture. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -77,6 +77,15 @@ export async function demarrer(element) {
|
||||
try {
|
||||
await chargerZbar();
|
||||
scanner = await window.zbar.ZBarScanner.create();
|
||||
|
||||
// ⚠️ L'add-on EAN-2 est DÉSACTIVÉ par défaut dans zbar : sans cette ligne il n'est pas
|
||||
// seulement filtré, il n'est jamais produit. Mesuré le 2026-08-19 sur un EAN-13 + EAN-2
|
||||
// rendus en canvas — scanner par défaut : un seul symbole ; EAN-2 activé : deux.
|
||||
// C'est lui qui porte le numéro de parution d'un périodique.
|
||||
// L'EAN-5 reste désactivé : il porte un PRIX, dont on n'a rien à faire, et un symbole
|
||||
// de moins est un symbole de moins à écarter.
|
||||
scanner.setConfig(
|
||||
window.zbar.ZBarSymbolType.ZBAR_EAN2, window.zbar.ZBarConfigType.ZBAR_CFG_ENABLE, 1);
|
||||
} catch (e) {
|
||||
return 'erreur:Decodeur — ' + (e.message || 'zbar indisponible');
|
||||
}
|
||||
@@ -89,7 +98,7 @@ export async function demarrer(element) {
|
||||
return 'ok';
|
||||
}
|
||||
|
||||
// Capture une image et la décode. Renvoie le premier code lu, ou null.
|
||||
// Capture une image et la décode. Renvoie { code, parution }, ou null si rien n'est lu.
|
||||
//
|
||||
// ⚠️ L'image ENTIÈRE est analysée, contrairement à la version ZXing.Net qui n'envoyait que la
|
||||
// bande centrale (45 % de la hauteur) pour limiter ce qui traversait le pont. Ce recadrage était
|
||||
@@ -107,14 +116,19 @@ export async function decoder(largeurMax) {
|
||||
const symboles = await window.zbar.scanImageData(ctx.getImageData(0, 0, l, h), scanner);
|
||||
if (!symboles || symboles.length === 0) return null;
|
||||
|
||||
// Les add-ons EAN-2 (numéro de parution) et EAN-5 (prix) sont imprimés à côté du code
|
||||
// principal et remontent comme des symboles distincts : ils ne sont pas ce qu'on cherche.
|
||||
const principal = symboles.find(s => {
|
||||
const type = window.zbar.ZBarSymbolType[s.type];
|
||||
return type !== 'ZBAR_EAN2' && type !== 'ZBAR_EAN5';
|
||||
});
|
||||
const typeDe = s => window.zbar.ZBarSymbolType[s.type];
|
||||
|
||||
return principal ? principal.decode() : null;
|
||||
// Les add-ons EAN-2 et EAN-5 sont imprimés À CÔTÉ du code principal et remontent comme des
|
||||
// symboles distincts. Le code du livre — ou de la revue — n'est jamais l'un d'eux.
|
||||
const principal = symboles.find(s => typeDe(s) !== 'ZBAR_EAN2' && typeDe(s) !== 'ZBAR_EAN5');
|
||||
if (!principal) return null;
|
||||
|
||||
// L'EAN-2 porte le numéro de parution d'un périodique ; l'EAN-5 porte un PRIX et n'a rien à
|
||||
// faire ici. On ne remonte donc que le premier, et seulement pour information : c'est
|
||||
// l'écran qui décidera d'en faire quelque chose, et l'utilisateur qui confirmera.
|
||||
const ean2 = symboles.find(s => typeDe(s) === 'ZBAR_EAN2');
|
||||
|
||||
return { code: principal.decode(), parution: ean2 ? ean2.decode() : null };
|
||||
}
|
||||
|
||||
// Libérer la caméra : sinon le voyant reste allumé et la batterie se vide,
|
||||
|
||||
Reference in New Issue
Block a user