2015-10-28 4 views
2

Я должен создать PDF с возможностью поиска с нескольких изображений с 24-разрядной глубиной jpg. Я использую tess-two, который по умолчанию поставляется с libpng. Проблема в том, что tesseracts выводит поврежденный pdf! Изображений нет в pdf. Текст по-прежнему присутствует в pdf.Tesseract pdf renderer с 24-разрядной глубиной jpg image

У меня нет проблем при использовании png-файлов, однако входной файл jpg. Преобразование JPG, чтобы детские с помощью следующего кода очень много времени:

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

Bitmap bitmap = BitmapFactory.decodeFile("myimage.jpg", options); 

File file = new File("myoutputimage.png"); 
FileOutputStream fOut; 
try 
{ 
    fOut = new FileOutputStream(file); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut); 
    fOut.flush(); 
    fOut.close(); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

На моей машине это занимает 2 секунды, чтобы создать файл в формате PNG.

Я уже скомпилировал tess-two с libjpeg, но это тоже не сработало. Можно ли создать PDF с возможностью поиска с помощью tesseract с входными файлами jpg?

ответ

1

Наконец-то он работает. Tess-two не отправляется с libjpeg. Если вы хотите передать файлы jpg для pdfrenderer, тогда вы должны скомпилировать leptonica с libjpeg. Я загрузил libjpeg и разместил его в каталоге jni libjpeg.

Создайте пустой jconfig.h в каталоге libjpeg. Создайте файл Android.mk со следующим содержимым:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libjpegt 

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) 

LOCAL_SRC_FILES := jaricom.c jcapimin.c jcapistd.c jcarith.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c jdarith.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemname.c 

include $(BUILD_SHARED_LIBRARY) 

Android.mk Финальный leptonica должен выглядеть следующим образом:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := liblept 

# leptonica (minus freetype) 

BLACKLIST_SRC_FILES := \ 
    %endiantest.c \ 
    %freetype.c \ 
    %xtractprotos.c 

LEPTONICA_SRC_FILES := \ 
    $(subst $(LOCAL_PATH)/,,$(wildcard $(LEPTONICA_PATH)/src/*.c)) 

LOCAL_SRC_FILES := \ 
    $(filter-out $(BLACKLIST_SRC_FILES),$(LEPTONICA_SRC_FILES)) 

LOCAL_CFLAGS := \ 
    -DHAVE_CONFIG_H \ 
    -DHAVE_LIBJPEG 

LOCAL_LDLIBS := \ 
    -lz 

# jni 

LOCAL_SRC_FILES += \ 
    box.cpp \ 
    boxa.cpp \ 
    pix.cpp \ 
    pixa.cpp \ 
    utilities.cpp \ 
    readfile.cpp \ 
    writefile.cpp \ 
    jni.cpp 

LOCAL_C_INCLUDES += \ 
    $(LOCAL_PATH) \ 
    $(LEPTONICA_PATH)/src \ 
    $(LIBPNG_PATH) \ 
    $(LIBJPEG_PATH) 

LOCAL_LDLIBS += \ 
    -ljnigraphics \ 
    -llog 

# common 
LOCAL_SHARED_LIBRARIES := libpngt libjpegt 
LOCAL_PRELINK_MODULE := false 

include $(BUILD_SHARED_LIBRARY) 

В ява файлов вы должны загрузить libjpegt:

System.loadLibrary("jpegt"); 

Кроме того, вы должны добавить это в файл Android.mk в папку jni:

LIBJPEG_PATH := $(LOCAL_PATH)/libjpeg 

Скомпилированный libjpeg неправильно сначала, но теперь он работает

Смежные вопросы