/*
параметры $filename, $destination, $widthDpi, $heightDpi уже инициализированы
*/
$handle = fopen($filename, "rb");
$segment[] = fread($handle, 2);
if( $segment[0] === "\xFF\xD8" )
{
$segment[] = fread($handle, 1);
if($segment[1] === "\xFF")
{
// Устанавливаем на начало внутренний указатель файла
rewind ($handle);
// считаем все байты заново, попарно
$bytesNumber = 0;
while(!feof($handle))
{
$daten = fread($handle, 2);
$bytesNumber += 2;
if( $bytesNumber == 16 )
$daten = pack("n", $widthDpi );
if( $bytesNumber == 18 )
$daten = pack("n", $heightDpi );
$newfile[] = $daten;
}
// Закрываем файл
fclose($handle);
// по окончании загрузки появляется новый файл в виде Array
// файл переобразуется в цепочку данных
$newfile = implode('',$newfile);
// вписываем его только в указанных целях
$handle = fopen($destination, "wb");
fwrite($handle, $newfile);
fclose($handle);
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return FALSE;
}
Изменение одного из полей заголовка JPEG-файла
нужно заменить пару полей заголовка JPEG файла, где хранится значение dpi изображения, на свое нужное. Т.е. так чтобы изображение имеющее в заголовке значения в 72 px/inch по горизонтали и вертикали, после обработки становилось равным к примеру 150 или 300 px/inch. Т.е. по сути мне надо заменить пару байтов в JPEG-файле.
Делаю так:
Код:
... не работает. Винда показывает в свойствах прежнее значение dpi. Мож кто знает что я не так делаю?
Может, Винда тогда читает разрешение картинок из метаданных Exif?
Можно попробовать стереть Exif и посмотреть как тогда будет работать...