[Résolu] rotation d'image

J’ai récupéré les documents d’un site en prod pour tester un plugin.
des photos ont été enregistrées tête en bas.
Dans les vignettes de spip ( par exemple ( dans édition- document) la vignette est à l’endroit si je clique dessus, je vois l’image tête en bas.
<docXX> donne aussi une image à l’endroit. l’image enregistree dans IMG est tête en bas.

Je suppose que la personne a utilisée la fonction rotation de l’espace privée de spip. En effet, lorsque l’on a enregistré une image dans un article on peut ensuite utiliser « modifier » de l’espace privé pour cette image.
dans modifier on peut faire une rotation de l’image.

Le problème c’est que quand j’appelle l’image dans un modèle par background-image: url('#FICHIER) l’image est tête en bas. Comment détecter la rotation et la prendre en compte ?
merci

C’est malheureuseme,ent un bug qui ne sera résolu qu’en 5.0.

La seule solution pour l’heure est d’ouvrir l’image avec un editeur d’image et supprimer les données d’orientation exif.

Ping @placido qui pourra en dire plus.

C’est plutôt @bricebou qui est en pointe sur ce chantier.

spip détecte la rotation effectuée dans spip …
je crois que je vais leur demander de ne pas utiliser d’image de ce type dans les modeles …

en attendant spip5, la redimension par image_reduire supprime les données exif donc ça supprime le problème : après image_reduire, les rotations avec SPIP sont possibles avec un rendu fidèle. Encore faut il rendre ces opérations accessibles en ligne dans le public ou dans le backend.

c’est difficile d’indiquer comment les éviter car sur un affichage bien réglé, elles apparaissent normalement tête en haut, grâce aux exifs.

effectivement [(#GET{image}|image_reduire{#LARGEUR,0})] met l’image à l’endroit … mais si je veux mettre en background : je dois faire
[(#SET{image,#GET{image}|extraire_attribut{src}})]
et je me retrouve avec l’image tête en bas car dans cache vignette elle est tête en bas.

Si tu veux un src et que |image_reduire va bien, tu peux aussi faire [(#GET{image}|image_reduire{#LARGEUR,0}|extraire_attribut{src})]. Mais à un moment ou à un autre, il faut qu’il y ait une rotation… Soit automatiquement grâce aux exifs lors d’un contexte d’affichage où les exifs sont pris en compte, soit à la main sur demande dans un contexte où les exifs ont été supprimés ou bien ne sont pas pris en compte.

autant pour moi
background-image: url('[(#FICHIER|image_reduire{#LARGEUR,0}|extraire_attribut{src})]'); fonctionne bien

j’ai essayé de creer un filtre pour mettre la rotation

function exif2($img,$extension) {
	

  // Charge le fichier WebP
// $im = imagecreatefromwebp('./example.webp');
// Convert it to a jpeg file with 100% quality
//imagejpeg($im, './example.jpeg', 100);

  $fonc='imagecreatefrom'.$extension;
  $image=$fonc($img);

   $exif = exif_read_data($image);
	if(!empty($exif['Orientation'])) {
		switch($exif['Orientation']) {
        case 8:
            $image = imagerotate($image,90,0);
            break;
        case 3:
            $image = imagerotate($image,180,0);
            break;
        case 6:
            $image = imagerotate($image,-90,0);
            break;
		}
	}
 
return $image;
    }

mais bon j’ai un message
Warning: imagecreatefrompng(): &quot;http://localhost/nddudimanche/IMG/png/leonxiv-d6b51.png&quot; is not a valid PNG file in C:\wamp64\www\nddudimanche\plugins\paramsite\paramsite_fonctions.php on line *98*

pour info j’ai trouve cela

When the new update came out from Apple for iOS6 it provided the ability for iPad, iPod, and iPhones to be able to upload files from the device through Safari. Obviously this will open up an array of implementations where at one point it was just not possible.

The issue comes when a photo is uploaded it will be dependent on the location of the « button » when the photo was taken. Imagine if you will that you have your iPhone turned with the button at the top and you take a photo. The photo when uploaded to your server might be « upside down ».

The following code will ensure that all uploaded photos will be oriented correctly upon upload:

<?php
$image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name']));
$exif = exif_read_data($_FILES['image_upload']['tmp_name']);
if(!empty($exif['Orientation'])) {
    switch($exif['Orientation']) {
        case 8:
            $image = imagerotate($image,90,0);
            break;
        case 3:
            $image = imagerotate($image,180,0);
            break;
        case 6:
            $image = imagerotate($image,-90,0);
            break;
    }
}
// $image now contains a resource with the image oriented correctly
?>

sur le site PHP: exif_read_data - Manual
est-ce que le pb ne viendrait pas de la ?

bon je m’en sort pas Je vais attendre spip 5.
Je vais dire aux rédacteurs que si l’image apparait a l’envers , ils utilisent le retourner de modifier image … car dans ce cas c’est ok.
le pb doit venir de l’image de ipad ou ipod.