Photos de profil utilisateur ne figurant pas dans le navigateur IE ou ORG, mais faites dans d'autres navigateurs
-
10-12-2019 - |
Question
Service de profil utilisateur importe des photos à partir d'une annonce. Synchroniser et profiler les photos sont en cours de création. J'ai identifié une image de profil qui ne s'affichera pas dans IE8, eventHough l'image existe. Lors de la visualisation du profil de l'utilisateur avec chrome (et suspectez d'autres navigateurs), il affichera l'amende. L'image ne s'affiche pas non plus dans le navigateur Org sur un navigateur.
J'ai fait des recherches et j'ai constaté qu'il y avait une chose connue dans IE qui n'imposera pas d'images enregistrées avec CMJNCODING ( http://www.plaveb.com/blog/cmyk-images-not-Displayed-in-internet-explorer et http://blog.rodneyrehm.de/archives/4 -Cmyk-images-and-navigateurs-and-imagemagick.html ).
J'ai essayé de déterminer si le fichier est codé CMJN, en utilisant les PowerShell suivants (provenant d'ici: https://stackoverflow.com/questions/446834/how-a-detect-if-a-jpeg-contains-cmyk-color-profile ):
cls
Add-PSSnapIn "Microsoft.SharePoint.PowerShell" -EA 0
$web = get-spweb "http://mysite.myco.com"
$profilePhotos = $web.Lists["User Photos"]
$folder = $profilePhotos.RootFolder.SubFolders["Profile Pictures"]
$files = $folder.Files | sort "Name"
foreach($file in $files)
{
if (($file.Name -like "*problemphoto*")
{
$stream = $file.OpenBinaryStream()
$image = New-Object -TypeName System.Drawing.Bitmap -ArgumentList $stream
$flagValues = ([enum]::parse([type]"System.Drawing.Imaging.ImageFlags",$image.Flags))
$flagValues
}
}
Les résultats des drapeaux n'ont pas indiqué un scénario CMJN. En fait, il semble indiquer RVB.
couleursPACERGB, HASREALDPI, HASREALPIXESIZE, READONLY
J'ai comparé cela avec une bonne photo de profil connue et les résultats correspondés.
En outre, j'ai copié l'image localement, l'a ouvert dans la peinture et redoublit le fichier. J'ai ensuite téléchargé manuellement le fichier sur la bibliothèque de photo de profil de l'hôte de mon site et la photo a fonctionné dans IE.
Quelqu'un a vu des problèmes comme celui-ci avec des images de profil? Y a-t-il autre chose que la chose cmyk qui pourrait causer ce problème?
La solution
On dirait que l'extension de fichier ne correspond pas au type de fichier vrai.Dans ce cas particulier, le nom du fichier indiquait ".jpg", cependant, c'était vraiment un ".bmp".
J'ai écrit un script pour aider à déterminer s'il y avait d'autres exemples de ceci:
cls
Add-PSSnapIn "Microsoft.SharePoint.PowerShell" -EA 0
function GetTrueFileFormat($rawFormatGuidString)
{
$Bmp = "b96b3cab-0728-11d3-9d7b-0000f81ef32e"
$Emf = "b96b3cac-0728-11d3-9d7b-0000f81ef32e"
$Exif = "b96b3cb2-0728-11d3-9d7b-0000f81ef32e"
$Gif = "b96b3cb0-0728-11d3-9d7b-0000f81ef32e"
$Icon = "b96b3cb5-0728-11d3-9d7b-0000f81ef32e"
$Jpeg = "b96b3cae-0728-11d3-9d7b-0000f81ef32e"
$MemoryBmp = "b96b3caa-0728-11d3-9d7b-0000f81ef32e"
$Png = "b96b3caf-0728-11d3-9d7b-0000f81ef32e"
$Tiff = "b96b3cb1-0728-11d3-9d7b-0000f81ef32e"
$Wmf = "b96b3cad-0728-11d3-9d7b-0000f81ef32e"
switch($rawFormatGuidString)
{
$Bmp {"Bmp"; break}
$Emf {"Emf"; break}
$Exif {"Exif"; break}
$Gif {"Gif"; break}
$Icon {"Icon"; break}
$Jpeg {"Jpeg"; break}
$MemoryBmp {"MemoryBmp"; break}
$Png {"Png"; break}
$Tiff {"Tiff"; break}
$Wmf {"Wmf"; break}
default {"unknown"}
}
}
function IsSameFileType([string] $ext, [string] $rawFormat)
{
$ext = $ext.Replace(".", "")
if ($ext -eq "jpg" -and $rawFormat -eq "Jpeg")
{
return $true
}
if ($rawFormat -ne $ext)
{
return $false
}
return $true
}
$web = get-spweb "http://my.xyz.com"
$profilePhotos = $web.Lists["User Photos"]
$folder = $profilePhotos.RootFolder.SubFolders["Profile Pictures"]
$files = $folder.Files | sort "Name"
$files.Count
foreach($file in $files)
{
$fileName = $file.Name
$fileInfo = new-object System.IO.FileInfo -ArgumentList $fileName
$ext = $fileInfo.Extension
$stream = $file.OpenBinaryStream()
$image = New-Object -TypeName System.Drawing.Bitmap -ArgumentList $stream
$rawFormatGuidString = $image.RawFormat.Guid.ToString()
$trueFormat = GetTrueFileFormat $rawFormatGuidString
$sameFormat = IsSameFileType $ext $trueFormat
if ($sameFormat -ne $true)
{
$fileName
Write-Host "NOT SAME FORMAT!!" -foregroundcolor red
}
}
J'espère que cela aide quelqu'un d'autre quelque temps.