#ios #objective-c #zxing #drawinrect
Вопрос:
Я создал пустое изображение в формате png и вставил в него несколько объектов. например, текст, логотип, изображение штрих-кода. Теперь у меня проблема с изображением штрих — кода.
Когда я вставляю штрих-код-изображение внутри пустого png
И я открыл последнее изображение, на котором я обнаружил серые линии, обозначенные штрихкодами.(Вы можете увидеть серую линию, когда увеличите изображение 4 или более раз).Ниже приведено окончательное изображение.png, которое вы можете увидеть или скачать..
Я посмотрел на свое изображение штрих — кода, там нет серых линий. (Вы можете видеть многократное увеличение во времени без серых линий).Ниже приведено изображение штрих-кода.png, которое вы можете увидеть или скачать..
Я не могу сканировать штрих-код с помощью сканера из-за серых линий, отображающих новое изображение.
Я создал изображение штрих-кода с помощью библиотеки zxing и использовал следующий код для вставки внутри конечного изображения.
ZXBitMatrix* result = [writer encode:@"B51554" format:kBarcodeFormatCode39 width:232 height:54 error:amp;error];
CGImageRef imageRef = CGImageRetain([[ZXImage imageWithMatrix:result] cgimage]);
UIImage* uiImage = [[UIImage alloc] initWithCGImage:imageRef];
[uiImage drawInRect:CGRectMake(14, 168, 116, 27) blendMode:kCGBlendModeNormal alpha:1.0];
Пожалуйста, подскажите, есть ли способ, чтобы во время вставки изображения штрих-кода я не терял качество или не получал серые линии внутри конечного изображения.
Спасибо за помощь
Комментарии:
1. Когда отображается штрих-код, вы также должны увеличить яркость экрана (
UIScreen.brightness
), иначе читатели не смогут правильно различить, что является белым.2. Почему бы тебе не проверить грамматику? У вас много странных выражений, таких как «серые линии», «Я не могу», «Я посмотрел свое изображение штрих-кода».
Ответ №1:
Эффект, который вы видите, называется сглаживанием.
На вашем исходном изображении полосы идеально выровнены по пикселям. Они имеют ширину 2 или 4 пикселя. В целом, ширина изображения составляет 232 пикселя (включая некоторое пустое пространство слева и справа).
В комбинированном изображении (вкл. текст и логотип), штрих-код имеет ширину примерно 300 пикселей. Это приводит к коэффициенту масштабирования около 1,4. Теперь невозможно правильно выровнять полосы с пикселями, так как они имеют ширину примерно 2,7 и 5,5 пикселей. Так что срабатывает сглаживание. При масштабировании изображения пиксели, которые только частично покрыты полосой, становятся серыми. Для человеческого глаза это сохраняет визуальное впечатление от равномерно расположенных полос.
Сглаживание обычно не является проблемой для считывателей штрих-кодов. Поскольку вы заявляете, что штрих-код не может быть отсканирован, это указывает на то, что вы работаете с нижним пределом разрешения изображения.
Лучшим вариантом, вероятно, является значительное увеличение разрешения изображения. Я не могу сказать, возможно ли это в вашем конкретном случае. Это не имело бы особого смысла, если бы изображение затем отображалось на дисплее с низким разрешением.
Следующий наилучший вариант-обеспечить, чтобы изображение было масштабировано таким образом, чтобы оно идеально совпадало с пикселями, т. Е. Использовать коэффициент масштабирования 1, 1,5 или 2 и поместить его в положение, которое является целочисленным значением.
Простое отключение сглаживания и использование дробного коэффициента масштабирования, скорее всего, не сработает. Полосы будут выровнены по пикселям, но их ширина изменится. Вместо 2 и 4 пикселей в ширину (или 3 и 6), они будут иметь ширину 1 и 3 или 3 и 5 пикселей, что также будет проблемой для сканера.
Комментарии:
1. Кроме того, при расчете размера в пикселях следует учитывать масштаб экрана.
2. Правомерная точка зрения. Если коэффициент масштабирования не слишком велик, он также должен быть целым числом.
3. Обычно единственной проблемой является масштаб экрана. Размер изображения, указанный в точках, например
232
, может достигать 696 физических пикселей. В результате изображение со сглаживанием масштабируется, и это может быть плохо.