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

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/61392

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top