#objective-c #cocoa #resolution #nsimage
#objective-c #cocoa #разрешение #nsimage
Вопрос:
Мне нужно изменить разрешение существующего изображения в objective-c точно так же, как инструменты приложения Apple для предварительного просмотра -> Настроить размер …-> Разрешение.
Пожалуйста, дайте мне знать возможные решения.
Ответ №1:
Вот отличный пример, который я использовал — http://weblog.scifihifi.com/2005/06/25/how-to-resize-an-nsimage /
Из этого примера вы можете записать resizedData в файл — и это будет результат с измененным размером в формате tiff.
Обновить:
здесь представлена реализация категории NSImage, которая позволяет сохранять экземпляр NSImage с указанным разрешением DPI:
@interface NSImage (DPIHelper)
- (void) saveAsImageType: (NSBitmapImageFileType) imageType withDPI: (CGFloat) dpiValue atPath: (NSString *) filePath;
@end
@implementation NSImage (DPIHelper)
- (void) saveAsImageType: (NSBitmapImageFileType) imageType withDPI: (CGFloat) dpiValue atPath: (NSString *) filePath
{
NSBitmapImageRep *rep = [[self representations] objectAtIndex: 0];
NSSize pointsSize = rep.size;
NSSize pixelSize = NSMakeSize(rep.pixelsWide, rep.pixelsHigh);
CGFloat currentDPI = ceilf((72.0f * pixelSize.width)/pointsSize.width);
NSLog(@"current DPI %f", currentDPI);
NSSize updatedPointsSize = pointsSize;
updatedPointsSize.width = ceilf((72.0f * pixelSize.width)/dpiValue);
updatedPointsSize.height = ceilf((72.0f * pixelSize.height)/dpiValue);
[rep setSize:updatedPointsSize];
NSData *data = [rep representationUsingType: imageType properties: nil];
[data writeToFile: filePath atomically: NO];
}
@end
вы можете использовать это следующим образом:
NSImage *theImage2 = [NSImage imageNamed:@"image.jpg"];
[theImage2 saveAsImageType:NSJPEGFileType withDPI: 36.0f atPath: @"/Users/<user-name>/image-updated.jpg"];
Комментарии:
1. Привет, спасибо за ссылку, но я ищу код для изменения разрешения изображения (DPI / PPI) на 72, 96, 100, 120, 150 и скоро …, а не физического размера изображения или создания его миниатюры. Пожалуйста, дайте мне знать, если вам известна какая-либо помощь относительно изменения разрешения изображения DPI / PPI.
2. в этом потоке обсуждается проблема с преобразованием точек на дюйм cocoadev.com/index.pl?ImageDPI — они решили эту проблему, обратившись к NSBitmapImageRep. Удачи!
3. Привет, еще раз спасибо, что нашли время предоставить мне ссылку. Но, опять же, мой вопрос остается без ответа. Мне нужен простой код, который изменит NSImage / NSBitmapImageRep DPI на заданный. Я не понимаю, как я могу изменить DPI, скомпоновав существующий NSImage в новый. Пожалуйста, предоставьте мне простую категорию NSImage или метод, который примет NSImage и новый DPI в качестве аргумента и вернет новый NSImage с переданным DPI. При сохранении этот новый NSImage должен быть эквивалентен изображению, настроенному приложением предварительного просмотра вручную.
4. Амицри, я обновил свой ответ реализацией категории NSImage, которая выполняет то, о чем вы просите
5. Денис, спасибо, ваш приведенный код, похоже, работает без особых проблем. Сначала я загружаю изображение с разрешением 300 точек на дюйм и меняю его на 72 точки на дюйм, которое работает нормально. Теперь, когда я снова беру то же самое преобразованное изображение с разрешением 72 DPI и пытаюсь изменить его обратно на 300 DPI, тогда я получаю высоту DPI = 300 и ширину DPI = 299,7073 в приложении предварительного просмотра. Пожалуйста, дайте мне знать, это обычное поведение или просто проблема с округлением в приложении предварительного просмотра. Еще раз спасибо за помощь.
Ответ №2:
Обратитесь на веб-сайт разработчика Apple.
ImageApp.
Улучшите свое изображение
Комментарии:
1. Привет, спасибо, я уже проверил эти приложения, но не нашел никакого кода, который помог бы мне настроить разрешение изображения непосредственно в NSImage и сохранить его как новое или перезаписать на существующем. дайте мне знать, если я чего-то не понимаю.
Ответ №3:
Вы не можете перевести свое изображение в высокое разрешение. Итак, вы хотите сжать свое изображение или что?
Если это то, что вы хотите, то вы можете использовать: UIImagePNGRepresentation и / или UIImageJPEGRepresentation. Где требуется установить свойство quality. В зависимости от качества размер вашего изображения будет уменьшен.
Комментарии:
1. Привет, спасибо за ваши усилия, но мне нужно решение для приложения MAC OS, а не для iphone.