Получите размер UIImage (длина байтов) не высота и ширина

Использование:

new_df[['df_t1', 'df_t2', 'df_val']] = new_df['df_test'].str.rsplit('),', expand=True)
new_df[['df_t1', 'df_t2']] += ')' 
print (new_df)
                   df_test     df_t1      df_t2 df_val
0  (-, 136), (-, 136), 1.0  (-, 136)   (-, 136)    1.0
1  (-, 136), (-, 438), 0.5  (-, 136)   (-, 438)    0.5
2  (-, 136), (-, 257), 0.5  (-, 136)   (-, 257)    0.5
57
задан rptwsthi 14 February 2013 в 11:15
поделиться

4 ответа

Базовые данные UIImage могут различаться, поэтому для одного и того же «изображения» можно иметь разные размеры данных. Единственное, что вы можете сделать, это использовать UIImagePNGRepresentation или UIImageJPEGRepresentation , чтобы получить эквивалентные конструкции NSData для каждой из них, а затем проверить их размер.

34
ответ дан 24 November 2019 в 19:23
поделиться

SWIFT 4 +

let imgData = image?.jpegData(compressionQuality: 1.0)
debugPrint("Size of Image: \(imgData!.count) bytes")

можно использовать этот прием для обнаружения размера изображения.

0
ответ дан 24 November 2019 в 19:23
поделиться

Я не уверен в вашей ситуации. Если вам нужен фактический размер байта, я не думаю, что вы это сделаете. Вы можете использовать UIImagePNGRepresentation или UIImageJPEGRepresentation, чтобы получить объект NSData сжатых данных изображения.

Я думаю, вы хотите получить фактический размер несжатого изображения (данные в пикселях). Вам необходимо преобразовать UIImage * или CGImageRef в необработанные данные. Это пример преобразования UIImage в IplImage (из OpenCV). Вам просто нужно выделить достаточно памяти и передать указатель на первый аргумент CGBitmapContextCreate.

UIImage *image = //Your image
CGImageRef imageRef = image.CGImage;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
IplImage *iplimage = cvCreateImage(cvSize(image.size.width, image.size.height), IPL_DEPTH_8U, 4);
CGContextRef contextRef = CGBitmapContextCreate(iplimage->imageData, iplimage->width, iplimage->height,
                                                iplimage->depth, iplimage->widthStep,
                                                colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);
CGContextDrawImage(contextRef, CGRectMake(0, 0, image.size.width, image.size.height), imageRef);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);

IplImage *ret = cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);
cvCvtColor(iplimage, ret, CV_RGBA2BGR);
cvReleaseImage(&iplimage);
1
ответ дан 24 November 2019 в 19:23
поделиться

Используйте свойство CGImage объекта UIImage. Затем с помощью комбинации CGImageGetBytesPerRow *
CGImageGetHeight, добавьте sizeof UIImage, вы должны быть в пределах нескольких байтов от фактического размера.

Это вернет размер изображения в несжатом виде, если вы хотите использовать его для таких целей, как malloc при подготовке к обработке растрового изображения (при условии, что 4-байтовый формат пикселей составляет 3 байта для RGB и 1 для Alpha):

int height = image.size.height,
    width = image.size.width;
int bytesPerRow = 4*width;
if (bytesPerRow % 16)
    bytesPerRow = ((bytesPerRow / 16) + 1) * 16;
int dataSize = height*bytesPerRow;
17
ответ дан 24 November 2019 в 19:23
поделиться
Другие вопросы по тегам:

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