Забыл, я отправил это. Я понял, как справиться с проблемой ориентации, поэтому решил поделиться. Кажется, теперь просто. С тех пор я воссоздал этот проект с использованием Codeigniter. КИ великолепен и экономит много времени, но я рад, что написал все сам в первый раз. Я уверен, что узнал больше таким образом.
Во-первых, если файл является jpg, я получаю данные EXIF с помощью PEL .
$new
- загруженный файл, который необходимо проверить на ориентацию.
$this->load->library('pel/PelJpeg');
if($ext == 'jpg'){
$pdw= new PelDataWindow(file_get_contents($new));
if(PelJpeg::isValid($pdw)){
$input_jpg = new PelJpeg($new);
$exif = $input_jpg->getExif();
}
}
Затем, если EXIF существует, получите значение ориентации и пропустите его через оператор switch, поверните его соответствующим образом и затем сбросьте значение ориентации. Я использую image_moo и Codeigniter, но это, очевидно, можно изменить, чтобы использовать любую библиотеку для работы с изображениями.
Честно говоря, я не уверен, что все эти операторы IF должны быть там, но я продолжал сталкиваться с проблемами с jpg, которые включали только некоторую информацию EXIF и взорвали сценарий без них.
if($exif !== NULL){
if($tiff = $exif->getTiff()){
if($ifd0 = $tiff->getIfd()){
if($orient = $ifd0->getEntry(PelTag::ORIENTATION)){
$this->image_moo->load($new);
//find the orientation value from the orientation tag. May be a better way, but this works for me.
$orientation = str_replace(' ', '', $orient);
//The orientation value from the orientation tag is after 'Value:'
if (($tmp = strstr($orientation, 'Value:')) !== false) {
$str = substr($tmp, 6, 1);
}
switch ($str)
{
// up is pointing to the right
case 8:
$this->image_moo->rotate(90);
$orient->setValue(1);
break;
// image is upside-down
case 3:
$this->image_moo->rotate(180);
$orient->setValue(1);
break;
// up is pointing to the left
case 6:
$this->image_moo->rotate(270);
$orient->setValue(1);
break;
// correct orientation
case 1:
break;
}
$this->image_moo->save($new,TRUE);
if ($this->image_moo->errors) print $this->image_moo->display_errors();
$this->image_moo->clear();
}
}
}
}
Надеюсь, это будет полезно для кого-то еще, кто борется с теми же проблемами.
Если вы видите что-то, что можно улучшить, пожалуйста, дайте мне знать. Но это прекрасно работает для меня.
Mark