Я новичок в работе с изображениями jpeg таким образом, но до сих пор удалось: получить приложение iPad для отправки изображения в базу данных SQL; получить страницу php для чтения сохраненных данных и отображения изображения. Тем не менее, я также пытаюсь прочитать заголовок, который, как я думал, должен содержать photoID (отправляется с использованием сценария Xcode, показанного ниже)Чтение заголовков jpeg
Я использую этот код для чтения заголовков, но я не понимаю, что происходит. Это проверяет изображение в базе данных, и изображение отображается (так что я знаю, что у меня есть изображение), но он говорит Нет данных заголовка. Это правда? Я думал, что сценарий, используемый для создания тела HTTP, отправленного из Xcode, включает информацию заголовка.
$select = "SELECT * FROM tblPhotos";
$result = mysqli_query($link, $select);
while($row = mysqli_fetch_array($result))
{
$img=base64_encode($row['photoData']);
echo "<img src=\"data:image/jpg;charset=utf8;base64, $img\"/>";
echo "<br>";
$exif = exif_read_data($img, 0, true);
echo $exif === false ? "No header data found.<br />\n" : "Image contains headers<br />\n";
}
Xcode script, который отправляет изображение в базу данных.
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"%@.jpg\"\r\n", photoID] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[photoRequest setHTTPBody:body];
UPDATE:
Я также попытался следующие, это сказать, что у меня есть заголовки. Однако заголовки не отображаются с помощью цикла foreach, а vardump ($ exif) дает мне NULL.
while($row = mysqli_fetch_array($result))
{
$img = base64_encode($row['photoData']);
echo "<img src=\"data:image/jpg;charset=utf8;base64, $img\"/>";
echo "<br>";
$temp = tmpfile();
fwrite($temp, $row['photoData']);
$exif = exif_read_data($temp, 0, true);
echo $exif !== false ? "Image contains headers.<br />\n" : "No header data found.<br />\n";
vardump($exif);
foreach ($exif as $key => $section)
{
foreach ($section as $name => $val)
{
echo "$key.$name: $val<br />\n";
}
}
fclose($temp);
}
Вы просмотрели документацию ['exif_read_data()') (http://php.net/manual/en/function.exif-read-data.php)? Довольно ясно, что вы передаете строку base64, где PHP ожидает имя файла. Кроме того, я думаю, вы имеете в виду ваш код Objective-C; Xcode - это IDE. –
Я прочитал документы (вот где я получил код для отображения изображения), и я пытаюсь их понять, но я новичок в работе с jpegs таким образом. Мой вопрос состоит в том, что я сначала отправил любую информацию заголовка в POST из Xcode (в частности, фотоидентификатор), и если да, то как это сделать, используя exif и php. Большой вопрос, который я знаю, но любые указатели ... были в этом часами. – RGriffiths
Сохраните необработанные (не базовые) данные изображения в [файл temp] (http://php.net/manual/en/function.tmpfile.php) и передайте этот путь к функции 'exif_read_data()'. Строка base64 - это закодированная строка содержимого, но эта функция должна читать файл. –