UIImagePickerController редактируя позволенный блокировки UIImage макс. размеру 320x320

В выводе skim() есть две части. Если вы хотите управлять числовой частью, вы можете использовать skim_to_list следующим образом. Также проще экспортировать в другой формат.

msleep %>%
  group_by(vore) %>%
  skim_to_list(sleep_total)%>%
  .[["numeric"]]%>%
  dplyr::select(vore,variable,missing,complete,n,mean,sd,
                median,iqr,p0,p25,p75,p100,hist)

# A tibble: 5 x 14
  vore    variable    missing complete n     mean    sd     median iqr     p0    p25    p75     p100   hist    
* <chr>   <chr>       <chr>   <chr>    <chr> <chr>   <chr>  <chr>  <chr>   <chr> <chr>  <chr>   <chr>  <chr>   
1 carni   sleep_total 0       19       19    10.38   4.67   10.4   " 6.75" 2.7   6.25   "13   " 19.4   ▃▇▂▇▆▃▂▃
2 herbi   sleep_total 0       32       32    " 9.51" 4.88   10.3   " 9.92" 1.9   "4.3 " 14.22   16.6   ▆▇▁▂▂▆▇▅
3 insecti sleep_total 0       5        5     14.94   5.92   18.1   "11.1 " 8.4   "8.6 " "19.7 " 19.9   ▇▁▁▁▁▁▃▇
4 omni    sleep_total 0       20       20    10.93   2.95   " 9.9" " 1.83" "8  " "9.1 " 10.93   "18  " ▆▇▂▁▁▁▁▂
5 NA      sleep_total 0       7        7     10.19   "3   " 10.6   " 3.5 " 5.4   8.65   12.15   13.7   ▃▃▁▁▃▇▁▇

РЕДАКТИРОВАТЬ

Добавление kable() в соответствии с запросом в комментарии.

msleep %>%
  group_by(vore) %>%
  skim_to_list(sleep_total)%>%
  .[["numeric"]]%>%
  dplyr::select(vore,variable,missing,complete,n,mean,sd,median,iqr,p0,p25,p75,p100,hist)%>%
  kable()

|  vore   |  variable   | missing | complete | n  | mean  |  sd  | median | iqr  | p0  | p25  |  p75  | p100 |   hist   |
|---------|-------------|---------|----------|----|-------|------|--------|------|-----|------|-------|------|----------|
|  carni  | sleep_total |    0    |    19    | 19 | 10.38 | 4.67 |  10.4  | 6.75 | 2.7 | 6.25 |  13   | 19.4 | ▃▇▂▇▆▃▂▃ |
|  herbi  | sleep_total |    0    |    32    | 32 | 9.51  | 4.88 |  10.3  | 9.92 | 1.9 | 4.3  | 14.22 | 16.6 | ▆▇▁▂▂▆▇▅ |
| insecti | sleep_total |    0    |    5     | 5  | 14.94 | 5.92 |  18.1  | 11.1 | 8.4 | 8.6  | 19.7  | 19.9 | ▇▁▁▁▁▁▃▇ |
|  omni   | sleep_total |    0    |    20    | 20 | 10.93 | 2.95 |  9.9   | 1.83 |  8  | 9.1  | 10.93 |  18  | ▆▇▂▁▁▁▁▂ |
|   NA    | sleep_total |    0    |    7     | 7  | 10.19 |  3   |  10.6  | 3.5  | 5.4 | 8.65 | 12.15 | 13.7 | ▃▃▁▁▃▇▁▇ |
8
задан Corey Floyd 15 September 2009 в 04:46
поделиться

2 ответа

Как сказал Крейг, это проблема на форумах разработчиков и на регулярных форумах Apple. Однако я нашел способ обойти это. Я использую небольшой код из:

Форумы разработчиков Apple

Он включает в себя большую часть того, что вам нужно, и решает все проблемы с ориентацией камеры. Я добавил следующее, которое будет принимать информацию о редактировании и использовать ее для получения исходного прямоугольника обрезки с этим дополнением:

- (UIImage*)scaleImage:(UIImage*)anImage withEditingInfo:(NSDictionary*)editInfo{

    UIImage *newImage;

    UIImage *originalImage = [editInfo valueForKey:@"UIImagePickerControllerOriginalImage"];
    CGSize originalSize = CGSizeMake(originalImage.size.width, originalImage.size.height);
    CGRect originalFrame;
    originalFrame.origin = CGPointMake(0,0);
    originalFrame.size = originalSize;

    CGRect croppingRect = [[editInfo valueForKey:@"UIImagePickerControllerCropRect"] CGRectValue];
    CGSize croppingRectSize = CGSizeMake(croppingRect.size.width, croppingRect.size.height);

    CGSize croppedScaledImageSize = anImage.size;

    float scaledBarClipHeight = 80;

    CGSize scaledImageSize;
    float scale;

    if(!CGSizeEqualToSize(croppedScaledImageSize, originalSize)){

        scale = croppedScaledImageSize.width/croppingRectSize.width;
        float barClipHeight = scaledBarClipHeight/scale;

        croppingRect.origin.y -= barClipHeight;
        croppingRect.size.height += (2*barClipHeight);

        if(croppingRect.origin.y<=0){
            croppingRect.size.height += croppingRect.origin.y;
            croppingRect.origin.y=0;
        }

        if(croppingRect.size.height > (originalSize.height - croppingRect.origin.y)){
            croppingRect.size.height = (originalSize.height - croppingRect.origin.y);
        }


        scaledImageSize = croppingRect.size;
        scaledImageSize.width *= scale;
        scaledImageSize.height *= scale;

        newImage =  [self cropImage:originalImage to:croppingRect andScaleTo:scaledImageSize];

    }else{

        newImage = originalImage;

    }

    return newImage;
}

Я обновил метод обратного вызова из сообщения на форуме разработчиков следующим образом:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo {

    [self dismissModalViewControllerAnimated:YES];
    self.myImageView.userInteractionEnabled=YES;
    CGRect imageFrame = myImageView.frame;
    CGPoint imageCenter = myImageView.center;
    UIImage *croppedImage;


    NSMutableDictionary *imageDescriptor = [editInfo mutableCopy];

    // CGFloat scaleSize = 400.0f;
    CGFloat scaleSize = 640.0f;
    switch ([picker sourceType]) {
            //done
        case UIImagePickerControllerSourceTypePhotoLibrary:
            croppedImage = [self scaleImage:img withEditingInfo:editInfo];
            [imageDescriptor setObject:croppedImage forKey:@"croppedImage"];
            break;


        case UIImagePickerControllerSourceTypeCamera: {
            UIImageOrientation originalOrientation = [[editInfo objectForKey:UIImagePickerControllerOriginalImage] imageOrientation];
            if (originalOrientation != UIImageOrientationUp) {
                NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
                CGRect origRect;
                [[editInfo objectForKey:UIImagePickerControllerCropRect] getValue:&origRect];
                UIImage *rotatedImage = straightenAndScaleImage([editInfo objectForKey:UIImagePickerControllerOriginalImage], scaleSize);
                CGFloat scale = scaleSize/1600.0f;
                origRect.origin.x *= scale;
                origRect.origin.y *= scale;
                origRect.size.width *= scale;
                origRect.size.height *= scale;
                croppedImage = [self cropImage:rotatedImage to:origRect andScaleTo:CGSizeMake(320, 480)];
                [imageDescriptor setObject:croppedImage forKey:@"croppedImage"];
                [pool drain];
            }
            else {
                croppedImage = [self scaleImage:img withEditingInfo:editInfo];
                [imageDescriptor setObject:croppedImage forKey:@"croppedImage"];
            }
        }
            break;

        case UIImagePickerControllerSourceTypeSavedPhotosAlbum: {
            UIImageOrientation originalOrientation = [[editInfo objectForKey:UIImagePickerControllerOriginalImage] imageOrientation];
            if (originalOrientation != UIImageOrientationUp) {
                NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
                CGRect origRect;
                [[editInfo objectForKey:UIImagePickerControllerCropRect] getValue:&origRect];
                UIImage *rotatedImage = straightenAndScaleImage([editInfo objectForKey:UIImagePickerControllerOriginalImage], scaleSize);
                CGFloat scale = scaleSize/640.0f;
                origRect.origin.x *= scale;
                origRect.origin.y *= scale;
                origRect.size.width *= scale;
                origRect.size.height *= scale;
                croppedImage = [self cropImage:rotatedImage to:origRect andScaleTo:CGSizeMake(320, 480)];
                [imageDescriptor setObject:croppedImage forKey:@"croppedImage"];
                [pool drain];
            }
            else {
                croppedImage = [self scaleImage:img withEditingInfo:editInfo];
                [imageDescriptor setObject:croppedImage forKey:@"croppedImage"];
            }
        }
            break;
        default:
            break;
    }

    imageFrame.size = croppedImage.size;
    myImageView.frame = imageFrame;
    myImageView.image = [imageDescriptor objectForKey:@"croppedImage"];
    myImageView.center = imageCenter;


}
7
ответ дан 5 December 2019 в 10:44
поделиться

Это, кажется, помеха SDK, по крайней мере, при установке allowsImageEditing на TRUE на средстве выбора изображения. Существует немного обсуждения этой темы на форумах Apple здесь:

http://discussions.apple.com/message.jspa?messageID=7841993

1
ответ дан 5 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: