- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
SnapChat 如何将图像调整为如此小的文件大小,同时仍保持良好的质量?我的图像为后置摄像头节省了大约 90KB,为前置摄像头节省了 45KB。我在网上看到发送一个快照大约是 15kb。如何更好地优化图像?
这是我的代码,可以拍照、调整大小并优化它以便发布:
// Takes a still image of a video, then resizes image while user is deciding whether to post or retake it
@IBAction func takePictureButton(_ sender: Any) {
if let videoConnection = stillImageOutput?.connection(withMediaType: AVMediaTypeVideo){
videoConnection.videoOrientation = AVCaptureVideoOrientation.portrait
stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: {
(sampleBuffer, error) in
if sampleBuffer != nil {
self.takePicture.isHidden = true
self.rotate.isHidden = true
self.back.isHidden = true
self.save.isHidden = false
self.retake.isHidden = false
let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(sampleBuffer)
let dataProvider = CGDataProvider(data: imageData as! CFData)
let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: CGColorRenderingIntent.defaultIntent)
// Handles scaling image while user decides whether or not to post or retake
// Scale this up for smaller images.. idk why
let image = UIImage(cgImage: cgImageRef!, scale: 1.0, orientation: UIImageOrientation.right)
let size = image.size.applying(CGAffineTransform(scaleX: 0.4, y: 0.4))
UIGraphicsBeginImageContextWithOptions(size, true, 0.0)
image.draw(in: CGRect(origin: .zero, size: size))
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.imageDataToSend = UIImageJPEGRepresentation(scaledImage!, 0.4)
self.imageToUpload = image
self.didTakePhoto = true
self.tempImageView.image = image
self.tempImageView.isHidden = false
self.captureSession?.stopRunning()
}
})
}
}
最佳答案
您必须在调整图像大小/压缩图像之间找到完美的平衡。
幸运的是,您不是第一个遇到此问题的人。 Akshay in Built.io already made some trial and error to reach the perfect balance
- (UIImage *)compressImage:(UIImage *)image{
float actualHeight = image.size.height;
float actualWidth = image.size.width;
float maxHeight = 600.0;
float maxWidth = 800.0;
float imgRatio = actualWidth/actualHeight;
float maxRatio = maxWidth/maxHeight;
float compressionQuality = 0.5;//50 percent compression
if (actualHeight > maxHeight || actualWidth > maxWidth) {
if(imgRatio < maxRatio){
//adjust width according to maxHeight
imgRatio = maxHeight / actualHeight;
actualWidth = imgRatio * actualWidth;
actualHeight = maxHeight;
}
else if(imgRatio > maxRatio){
//adjust height according to maxWidth
imgRatio = maxWidth / actualWidth;
actualHeight = imgRatio * actualHeight;
actualWidth = maxWidth;
}else{
actualHeight = maxHeight;
actualWidth = maxWidth;
}
}
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality);
UIGraphicsEndImageContext();
return [UIImage imageWithData:imageData];
}
关于ios - snapchat 如何调整图像大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41736196/
在创建 shapchat ( https://www.snapchat.com/ ) 用户名时,我一直无法找到允许的字符。这里有人可以分享他们关于这方面的知识吗? 上下文:我正在创建一个用户名验证
按照 snapkit 登录文档 (WEB),我实现了服务器端代码并能够为用户获取访问 token (第 2.5 节 https://docs.snapchat.com/docs/tutorials
我正在开发一个网站。我在基于 php、html 的网站上添加了许多社交登录或共享按钮、链接,例如 facebook、tweeter、gplus、pintrest。现在我必须为 snapchat 添加社
我想知道是否有一种方法可以编写允许 PBJVision 在用户在后台播放自己的音乐时录制视频的功能。 最佳答案 AVAudioSession.sharedInstance().setCategory(
我正在开发一个 iOS 应用程序,用户可以发布该应用程序然后接收他们的快照。我已经看到用 "SnapHack" 完成了此操作但 SnapChat 本身并没有允许你做这些事情的 API。那么有人可以引导
SnapChat 如何将图像调整为如此小的文件大小,同时仍保持良好的质量?我的图像为后置摄像头节省了大约 90KB,为前置摄像头节省了 45KB。我在网上看到发送一个快照大约是 15kb。如何更好地优
我无法理解如何着手创建向下滑动手势来关闭覆盖层,该覆盖层是另一个具有自己的对象和图像的屏幕,然后能够滑动回到原始屏幕。 我目前有一个包含 3 个屏幕的 ScrollView 。一个 |乙 | C 和我
我正在开发一个 iOS 应用程序,用户可以在上传图像(如 Snapchat)时添加描述/文本。 他们是渲染图像并将文本添加到图像中,以便它成为图像本身的一部分,还是显示为图像上的 UILabel? 对
我很想知道 SnapChat 如何将数据发送到其他移动设备。例如,它是将数据发送到服务器然后将其存储以供下载,还是通过内置 ios 功能将数据直接发送到设备? 我对在设备之间发送数据的整个过程很感兴趣
我想在不同大小的视频上添加全屏叠加图像, 如果叠加层和视频具有相同的比例(相同的宽度和高度),我使用 ffmpeg 它可以正常工作。 如果视频高度和宽度尺寸小于叠加图像,则叠加图像被挤压,但我想像快照
我正在 android 和 ios 上构建一个应用程序,并且要求用户输入他们的 Snapchat 帐户。我不希望人们添加虚假的 Snapchat 帐户,所以我到处搜索但找不到方法。 我只找到了这个答案
我似乎无法理解一个好的设计,它允许用户创建一个对象,保存到数据库并跟踪该对象是否发布到服务器。 就像在 snapchat 中一样 - 离线时,您可以创建一个包含图片和接收者的快照对象,按发送,它会显示
因此,我们的想法是像 Snapchat 一样向用户提供某种通知(不必是标准的 Android 通知,可以是库或自定义通知)。也就是说,它出现在应用程序中,然后消失,不会出现在状态栏或通知抽屉中。有没有
我正在尝试在我的项目中实现 Snapchat 登录按钮。我已经下载了 SDK,创建了 Snapchat 开发者帐户,并在 info.plist 中编写了一些代码。 现在我可以登录 Snapchat 帐
我想像在 snapchat 中一样使用视频过滤器创建 android 应用程序。问题是我在 IOS 中找不到像 SCRecorder 这样的库,我已经在应用程序中添加了 FFmpeg 但即使使用 ff
我正在创建一个类似于 snapchat 的相机胶卷功能,其中相机位于底层,然后在点击一个按钮后相机胶卷出现。相机胶卷不会占据整个屏幕顶部的搜索栏仍然保留,并且在用向下滑动手势关闭时相机仍在运行。我不确
Snapchat 是如何把这个导航栏做成渐变背景和圆角的。谢谢! 我没有足够大的声誉来发布图片,但它是向人们展示你的 snapchat 的 View ,一直到左边。 func application(
在 snapchat 的登录页面上,按钮出现在键盘的顶部,我可以这样做,但由于 6plus 有不同尺寸的键盘,它把它的一部分切掉了。 我在垂直堆栈 View 中有两个文本字段和两个按钮,我希望垂直堆栈
我无法弄清楚如何将视频从 SnapChat 分享到我的应用程序,而 WhatsApp 可以毫无问题地做到这一点,所以这是可能的。 由于 SnapChat 与 contentprovider 一起使用,
在Shapchat的照片编辑器中,有一个带有引导线的剪刀工具提取对象(通过绘制要提取的对象的边缘)。 我想用 openCV 实现该工具,但我对 openCV 完全陌生。我搜索了openCV文档和教程,
我是一名优秀的程序员,十分优秀!