Я пытаюсь связать ImageOptim API с OCR.space API. Оба отличных API, кстати, я их очень рекомендую! Проблема заключается в том, что OCR api не принимает изображения более 1 мб или 2600x2600 пикселей на свободном уровне, и поэтому многие источники должны быть оптимизированы перед отправкой.ответ данных изображения от jquery .ajax в новый вызов ajax?
Im работает этот JQuery Ajax вызов ImageOptim из Кордовы завернутых HTML файл:
var compress = function(image) {
console.log("starting compress");
$.ajax({
url: "https://im2.io/eX4mp1E4pI/2600x2600,quality=low",
method: "POST",
data: {
file: image
},
processData: false,
contentType: false,
crossDomain: true
}).done(function(res) {
window.compressedImg = res;
formData.append("file", res);
runOCR();
}).fail(function(jqXHR, textStatus) {
console.log("Request failed: " + textStatus);
});
};
Обратите внимание:
- это (по моему опыту), потерпит неудачу в браузере из-за кросс блокирование доменных звонков в браузере, но не от кордовы.
- OCR совместимого сжатия не добавило еще (но требует размера файла, а также размер аргумента)
Выход из этого вызова является сырой PNG в виде строки, то есть то, что вы получаете, когда вы открываете .png в текстовом редакторе. Я пробовал много способов справиться с этим, но не могу понять, как использовать эти данные в следующем вызове ajax (см. Ниже), нужно ли его сохранять на диск, а затем загружать, если это так? (потому что я пытался записать его в localstorage, но он все равно будет рассматриваться как строка).
OCR.space call;
var formData = new FormData();
formData.append("language", "MYLANGUAGE");
formData.append("apikey", "MYAPIKEY");
formData.append("isOverlayRequired", false);
function runOCR2() {
jQuery.ajax({
url: 'https://api.ocr.space/parse/image',
data: formData,
dataType: 'form/multipart',
cache: false,
contentType: false,
processData: false,
method: 'POST',
success: function(ocrParsedResult) {
console.log(ocrParsedResult);
}
});
}
Обратите внимание: Вары здесь не установлены, но я держу их вместе в этом вопросе для ясности.
Ответ от этого вызова:
responseText: "{\"ParsedResults\":null,\"OCRExitCode\":99,\"IsErroredOnProcessing\":true,\"ErrorMessage\":\"No file uploaded or UR…"
то есть работа вызова, а параметр изображения не является допустимым изображением.
Любые идеи о том, как передать возвращенную строку, чтобы она читалась как изображение для следующего вызова api?
Это очень близко ... Я обнаружил, что https://github.com/acigna/jquery-ajax-native добавляет тип ответа поддержки для поддержки сгустков, но ваше решение, кажется, сделать это устаревшее; Там, где ваше решение выходит из строя, это спецификация загруженного файла.При исходном решении аргумент «файл» не передается никому, изменение «ничего» в «файл» приводит к ошибке, удаление параметра filename дает ошибку, потому что изображение не имеет допустимого расширения – Hessius
Добавление var fileOfBlob = новый файл ([blob], fileName); formData.append ('файл', fileOfBlob); делает blob файл, который должен быть доступен для отправки «как есть» - в консоли он выглядит «Хорошо», но я все равно получаю сообщение об ошибке API, размер которого должен быть больше 0 – Hessius
В традиционных формах с '<имя файла = «myfile'>» управляет тем, что вы передаете, поскольку «имя» - это именно то, что есть «что-либо», его просто маркер конверта для размещенных данных, но какой сервер будет видеть в качестве имени файла для файла, задается 'fileName' .I don ' знаю, если вы используете PHP или нет, но '$ _FILES' Арай на сервере будет как этот' массив ( [ничего] => Массив ( [имя] => myimage.png [тип] => изображения/png [tmp_name] =>/tmp/phpJvSJ94 [ошибка] => 0 [размер] => 950 ) ) 'i не знаю, хотя почему ошибка – Viney