As fotos do perfil do usuário não são exibidas no IE ou no navegador da organização, mas aparecem em outros navegadores
-
10-12-2019 - |
Pergunta
O serviço de perfil de usuário está importando fotos do AD.A sincronização e as fotos do perfil estão sendo criadas corretamente.Identifiquei uma foto de perfil que não será exibida no IE8, mesmo que a imagem exista.Ao visualizar o perfil do usuário com o Chrome (e suspeitar de outros navegadores), ele será exibido corretamente.A imagem também não é exibida no navegador da organização em nenhum navegador.
Fiz algumas pesquisas e descobri que existe uma coisa conhecida no IE que não exibe imagens que foram salvas com codificação CMYK (http://www.plaveb.com/blog/cmyk-images-not-displayed-in-internet-explorer e http://blog.rodneyrehm.de/archives/4-CMYK-Images-And-Browsers-And-ImageMagick.html).
Tentei determinar se o arquivo é codificado em CMYK, usando o seguinte PowerShell (obtido aqui: https://stackoverflow.com/questions/446834/how-to-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
}
}
Os resultados das bandeiras não indicaram um cenário CMYK.Na verdade, parece indicar RGB.
ColorSpaceRgb, HasRealDpi, HasRealPixelSize, ReadOnly
Comparei isso com uma foto de perfil conhecida e os resultados corresponderam.
Além disso, copiei a imagem localmente, abri-a no Paint e salvei o arquivo novamente.Em seguida, carreguei manualmente o arquivo para a biblioteca de fotos do perfil no host do meu site e a imagem funcionou no IE.
Alguém viu problemas como esse com fotos de perfil?Existe algo além do CMYK que pode causar esse problema?
Solução
Parece que a extensão do arquivo não corresponde ao tipo de arquivo verdadeiro.Neste caso específico, o nome do arquivo indicava “.jpg”, porém era na verdade um “.bmp”.
Escrevi um script para ajudar a determinar se havia algum outro exemplo disso:
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
}
}
Espero que isso ajude alguém algum dia.