1

У меня есть приложение, в котором пользователи могут снимать и сохранять свой профиль pic. Я использую образец https://github.com/RileyGB/BlackBerry10-Samples/tree/master/WebImageViewSample из github для загрузки изображения с url на мой взгляд, и он отлично работает. Проблема в том, что когда я сохраняю профиль pic от ios и просматриваю профиль pic в blackberry, он выглядит на 90 градусов влево. Но тот же url загружается отлично в ios и android. Ниже приведена ссылка образца изображения, взятого из iOS, который загружает правильно ios и android, но сдвигает налево до 90 градусов в ежевике. Он отлично работает для других изображений, которые берутся из Blackberry или Android. В любом случае, чтобы исправить это? Любая помощь приветствуетсяПроблема с ротацией изображения в ежевичных каскадах

http://oi57.tinypic.com/2hzj2c4.jpg

Ниже приведен пример кода загрузки изображения в QML

Page { 
    Container { 
     layout: DockLayout { 
     } 
     WebImageView { 
      id: webViewImage 
      url: "http://oi57.tinypic.com/2hzj2c4.jpg" 
      horizontalAlignment: HorizontalAlignment.Center 
      verticalAlignment: VerticalAlignment.Center 
      visible: (webViewImage.loading == 1.0) 
     } 
     ProgressIndicator { 
      value: webViewImage.loading 
      verticalAlignment: VerticalAlignment.Center 
      horizontalAlignment: HorizontalAlignment.Center 
      visible: (webViewImage.loading < 1.0) 
     } 
    } 

    actions: [ 
     ActionItem { 
      title: "Clear Cache" 
      ActionBar.placement: ActionBarPlacement.OnBar 
      onTriggered: { 
       webViewImage.clearCache(); 
       webViewImage.url = "http://oi57.tinypic.com/2hzj2c4.jpg"; 
      } 
     } 
    ] 
} 
+0

Если я открываю изображение на веб-сайте браузера, он также поворачивается (но если я сам просматриваю изображение, это нормально). Вы сами делали приложения iOS и Android? –

+0

Проверьте [EXIF] (http://webmasters.stackexchange.com/questions/16684/ipad-and-iphone-browser-rotating-images-on-site) вопрос. I –

+0

Нет, кто-то еще сделал приложение в iOS и Android, я делаю это в ежевике. Но если я попытаюсь загрузить этот рис в iOS или Android, он будет корректно отображаться без вращения. Как исправить это в ежевике? Кажется, что работает в android, поэтому я думаю, что должно быть какое-то исправление для ежевики тоже – Gamerlegend

ответ

0

Я был в состоянии решить эту проблему путем добавления библиотеки EXIF ​​и добавить дополнительные функции в webimageview класс

QByteArray WebImageView::getRotateImage(QByteArray imageFile) 
{ 
    //Load the image using QImage. 
    // A transform will be used to rotate the image according to device and exif orientation. 
     QTransform transform; 
    QImage image; 
    image.loadFromData((unsigned char*)imageFile.data(),imageFile.length(),"JPG"); 

    ExifData *exifData = 0; 
    ExifEntry *exifEntry = 0; 
    int exifOrientation = 1; 

    // Since the image will loose its exif data when its opened in a QImage 
    // it has to be manually rotated according to the exif orientation. 
    exifData = exif_data_new_from_data((unsigned char*)imageFile.data(),(unsigned int)imageFile.size()); 

    // Locate the orientation exif information. 
    if (exifData != NULL) { 

     for (int i = 0; i < EXIF_IFD_COUNT; i++) { 
      exifEntry = exif_content_get_entry(exifData->ifd[i], EXIF_TAG_ORIENTATION); 
      // If the entry corresponds to the orientation it will be a non zero pointer. 
      if (exifEntry) { 
       exifOrientation = exif_get_short(exifEntry->data, exif_data_get_byte_order(exifData)); 
       break; 
      } 
     } 
    } 
    // It's a bit tricky to get the correct orientation of the image. A combination of 
    // the way the the device is oriented and what the actual exif data says has to be used 
    // in order to rotate it in the correct way. 
    switch(exifOrientation) { 
     case 1: 
      // 0 degree rotation 
      return imageFile; 
      break; 
     case 3: 
      // 180 degree rotation 
      transform.rotate(180); 
      break; 
     case 6: 
      // 90 degree rotation 
      transform.rotate(90); 
      break; 
     case 8: 
      // 270 degree rotation 
      transform.rotate(270); 
      break; 
     default: 
      // Other orientations are mirrored orientations, do nothing. 
      break; 
    } 

    // Perform the rotation of the image before its saved. 
    image = image.transformed(transform); 

    QImage img =image; 
    QByteArray arr; 
    QBuffer buf(&arr); 
    buf.open(QIODevice::WriteOnly); 
    img.save(&buf, "PNG"); 
    buf.close(); 
    return arr; 

}