как изменить разрешение изображения в objective-c

#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.