- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
С'шная либа: http://fossies.org/dox/imlib2-1.4.5/image_8c_source.html
смотрим код сохраняющий картинку:
1241 __imlib_SaveImage(ImlibImage * im, const char *file,
1242 ImlibProgressFunction progress, char progress_granularity,
1243 ImlibLoadError * er)
..........................................
..........................................
1290 *er = IMLIB_LOAD_ERROR_UNKNOWN;
1291 if (errno == EEXIST)
1292 *er = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST;
1293 else if (errno == EISDIR)
1294 *er = IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY;
1295 else if (errno == EISDIR)
1296 *er = IMLIB_LOAD_ERROR_FILE_IS_DIRECTORY;
1297 else if (errno == EACCES)
1298 *er = IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE;
1299 else if (errno == ENAMETOOLONG)
1300 *er = IMLIB_LOAD_ERROR_PATH_TOO_LONG;
1301 else if (errno == ENOENT)
1302 *er = IMLIB_LOAD_ERROR_PATH_COMPONENT_NON_EXISTANT;
1303 else if (errno == ENOTDIR)
1304 *er = IMLIB_LOAD_ERROR_PATH_COMPONENT_NOT_DIRECTORY;
1305 else if (errno == EFAULT)
1306 *er = IMLIB_LOAD_ERROR_PATH_POINTS_OUTSIDE_ADDRESS_SPACE;
1307 else if (errno == ELOOP)
1308 *er = IMLIB_LOAD_ERROR_TOO_MANY_SYMBOLIC_LINKS;
1309 else if (errno == ENOMEM)
1310 *er = IMLIB_LOAD_ERROR_OUT_OF_MEMORY;
1311 else if (errno == EMFILE)
1312 *er = IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS;
1313 else if (errno == ENOSPC)
1314 *er = IMLIB_LOAD_ERROR_OUT_OF_DISK_SPACE;
1315 else if (errno == EROFS)
1316 *er = IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE;
обращаем внимание на строки *er =
в них записываются разные типы ошибок, обращаем внимаение на то, сколько типов используется
теперь берем перловую обертку: Image::Imlib2 (http://search.cpan.org/~lbrocard/Image-Imlib2-2.03/lib/Image/Imlib2.pm)
находим метод сохранения картинки, он в xs части lib/Image/Imlib2.xs
void
Imlib2_save(image, filename)
Image::Imlib2 image
char * filename
PROTOTYPE: $$
CODE:
{
Imlib_Load_Error err;
imlib_context_set_image(image);
imlib_save_image_with_error_return(filename, &err);
if (err != IMLIB_LOAD_ERROR_NONE) {
Perl_croak(aTHX_ "Image::Imlib2 save error: Unknown error");
}
}
imlib_save_image_with_error_return вызывает в конечном итоге __imlib_SaveImage из C'шной либы
обращаем внимание на то, как теперь подробно можно узнать о том, почему не удалось сохранить картинку
пример вывода такого кода в случае ошибки:
Image::Imlib2 save error: Unknown error at BL/Class/Image.pm line 608.
до тех пор, пока есть такие гении, я не беспокоюсь о своем хлебе