Я собираюсь уйти с моим прецедентом, прежде чем я объясню проблему, с которой я столкнулся.PHP fix image bytes
Я создаю мобильное приложение, используя рамки phonegap.
Для этого приложения мне нужно загрузить файл (изображение сделанное с помощью камеры).
На большинстве платформ я могу вернуть это изображение в качестве кодированного изображения base64.
Я могу отправить это обратно на сервер, и он может его декодировать и сохранить. (и делать некоторые другие вещи для удовольствия, так как это QR-код).
Теперь на symbian я не могу вернуть строку base64, и я могу получить URI только для изображения. Это не проблема, потому что я могу использовать xmlhttprequest, чтобы получить данные изображения и закодировать его на base64 с помощью javascript.
Этот метод работает, но это дает мне проблему.
У браузера Symbian появляется ошибка. Это веб-браузер на основе браузера с 2005 года (да, это старый, даже на новейших телефонах s60).
Ошибка в том, что он преобразует все символы, которые он не знает (не в таблице utf-8), в 2 байта. Если правильно помнить это было все выше 127.
Я попытался исправить эту ошибку, используя javascript, но это был не гот (btw, canvas, а затем getBinaries или что-то вроде этого не поддерживаются, так как canvas 2d не поддерживается браузером).
Итак, я пытаюсь создать обходной путь в php для исправления байтов. Это то, что я есть сейчас, хотя это не работает:
function getValidBin($bin, $offset = 0) {
$binLength = sizeof($bin);
for ($i = $offset; $i<=$binLength; $i++) {
if ($i == $binLength) {
return false;
}
if ($bin[$i] < 127) {
$binT = $bin[$i] + $bin[$i+1];
$bin2 = $bin;
$bin2[$i] = $binT;
$bin2[$i+1] = null;
if (imagecreatefromstring($bin2) != false) {
return $bin2;
} else {
$bin3 = getValidBin($bin2, $i);
if ($bin3 != false) {
return $bin3;
}
}
}
}
}
Эта функция не работает по какой-то причине. я получаю следующие предупреждения:
Warning: imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a recognized format in /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php on line 98
И я получаю:
Fatal error: Maximum function nesting level of '100' reached, aborting! in /opt/content/erik/omnicol/HTML/WS/services/qrDecoder/QrDecoder.php on line 87
Это последнее один довольно легко решить, я думаю, но я думаю, что i'de разместить его в любом случае.
Теперь, мой вопрос:
Am i на правильном пути?
Как я могу решить предупреждение?
спасибо заранее,
Эрик
P.S. извините, если мой английский плохой. Я не носитель языка, как я голландский.
p.s.2 Исправлена ошибка я говорил это одна: http://markmail.org/message/iosbn3rbcgu5k6qt
EDIT: Решения для макс 100 глубины было труднее, то я думал, что это будет. Так что помощь в этом тоже будет большой.
Как выглядят оригинальные и модифицированные последовательности байтов? – 2010-12-01 09:23:54
Не знаю, как дать вам правильные байты, но я могу дать вам base64: http://www.erikmaas.com/test/bins.html – Erik 2010-12-01 10:15:55