2016-01-08 4 views
1

Я пытаюсь уменьшить изображение до меньшего размера на некоторое время и не могу понять, почему он теряет качество, хотя я сталкивался с учебниками, говоря, что это не должно. Во-первых, я обрезать мое изображение в квадрат, а затем использовать этот код:Масштабирование изображения и потеря качества

let newRect = CGRectIntegral(CGRectMake(0,0, newSize.width, newSize.height)) 
      let imageRef = image.CGImage 

      UIGraphicsBeginImageContextWithOptions(newSize, false, 0) 
      let context = UIGraphicsGetCurrentContext() 

      // Set the quality level to use when rescaling 
      CGContextSetInterpolationQuality(context, CGInterpolationQuality.High) 
      let flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, newSize.height) 

      CGContextConcatCTM(context, flipVertical) 
      // Draw into the context; this scales the image 
      CGContextDrawImage(context, newRect, imageRef) 

      let newImageRef = CGBitmapContextCreateImage(context)! as CGImage 
      let newImage = UIImage(CGImage: newImageRef) 

      // Get the resized image from the context and a UIImage 
      UIGraphicsEndImageContext() 

Я также попробовал этот код с теми же результатами:

 let newSize:CGSize = CGSize(width: 30,` height: 30) 

     let rect = CGRectMake(0, 0, newSize.width, newSize.height) 

     UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0) 

     UIBezierPath(

      roundedRect: rect, 

      cornerRadius: 2 

      ).addClip() 

     image.drawInRect(rect) 

     let newImage = UIGraphicsGetImageFromCurrentImageContext() 

     UIGraphicsEndImageContext() 

     let imageData = UIImageJPEGRepresentation(newImage, 1.0) 

     sharedInstance.my.append(UIImage(data: imageData!)!) 

я все еще получаю размытое изображение после изменения размера. Я сравниваю его с тем, когда у меня есть представление изображения, и устанавливаю его на аспектное заполнение/подгонку, а изображение намного яснее и меньше. Это качество, которое я пытаюсь получить, и не могу понять, что мне не хватает. Я помещаю два изображения здесь, первое - более четкое изображение с использованием imageView, а второе - изображение, измененное с моим кодом. Как я могу манипулировать изображением, чтобы выглядеть ясным, как на изображении?

Clear image view

blurry

+0

Вы проверили [это] (HTTP://iosdevcenters.blogspot.in/2015/12/how-to-resize-image-in-swift-in-ios.html) учебник по изменению размеров изображений? –

+0

Да, я тоже пробовал этот метод. Я не могу понять, в чем проблема, тем более, что сначала я обрезаю квадрат, а затем установил его на 30x30. – Alex

+0

Почему бы вам не потерять качество? Вы уменьшаете изображение. Потеря будет происходить – Knight0fDragon

ответ

1

Выберите изображение, нажмите «Размер» инспектор и измените «X», «Y», «Ширина» и «Высота».

X = 14 
Y = 10 
Width = 60 
Height = 60 

Для круглого радиуса вы можете реализовать этот код:

cell.ImageView.layer.cornerRadius = 30.0 
cell.ImageView.clipsToBounds = true 

или идти к инспектору удостоверения, нажмите кнопку Добавить (+) в нижнем левом углу определенного пользователя атрибуты времени выполнения редактор. Дважды щелкните по полю Key Path нового атрибута, чтобы отредактировать путь ключа для атрибута до layer.cornerRadius Установите тип Number и значение 30. Чтобы сделать круговое изображение с квадратного изображения, радиус установлен на половину ширины изображения.

Дункан дал вам хорошее объяснение 30 по 30 слишком мал, поэтому пиксели или качество изображения потери, я рекомендую вам использовать 60 по 60

2

Вы должны использовать

let newSize:CGSize = CGSize(width: 30 * UIScreen.mainScreen().scale, height: 30 * UIScreen.mainScreen().scale) 

Это потому, что различные айфонов имеют различный размер.

+1

Я думаю, что это то, что должен делать '0'' 'UIGraphicsBeginImageContextWithOptions'. – jtbandes

0

В образце, который вы показываете, вы рисуете изображение «после» больше, чем начальное изображение. Если вы уменьшаете изображение с более крупного размера до 30 пикселей на 30 пикселей, вы отбрасываете много информации. Если вы затем нарисуете изображение 30x30 при большем размере, это будет выглядеть плохо. 30 на 30 - это крошечное изображение, без особого внимания.

Смежные вопросы