我正在编写 IOS 应用程序,需要将 CGImage 保存为 JPEG 文件。控制压缩质量很重要。
我已经编写了下面提供的函数。它有效,因为我得到了一个 JPEG 文件。但无论我设置什么压缩,我总是得到相同的结果。即文件大小始终相同。
谁能告诉我我做错了什么?
void CGImageWriteJPEG(CGImageRef image, NSString *path) {
NSMutableData * data = [[NSMutableData alloc] init];
CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)data, kUTTypeJPEG, 1, NULL);
float compression = .8; // What I put here does not seem to matter...
CFStringRef myKeys[1];
CFTypeRef myValues[1];
CFDictionaryRef myOptions = NULL;
myKeys[0] = kCGImageDestinationLossyCompressionQuality;
myValues[0] = CFNumberCreate(NULL, kCFNumberFloatType, &compression);
myOptions = CFDictionaryCreate( NULL, (const void **)myKeys, (const void **)myValues, 1,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CGImageDestinationSetProperties(destination, myOptions);
CGImageDestinationAddImage(destination, image, nil); …Run Code Online (Sandbox Code Playgroud) 我有一个代码:
Image image1 = Image.FromFile(sOriginalImageFileName, true);
....
image1.Save(sNewFileName, image1.RawFormat);
Run Code Online (Sandbox Code Playgroud)
它适用于 png。但是用 Photoshop 打开新的 jpeg 文件,我得到
“无法完成您的请求,因为文件指定了不受支持的 JPEG 精度”
我究竟做错了什么?提前致谢。
我目前jpegoptim在 CentOS 6 上使用。它可以让您设置质量和文件大小基准。但是,它不允许您调整图像大小。
我有 5000 张所有文件大小和尺寸的图像,我想将它们缩小到最大宽度和最大文件大小。
例如,我想将所有图像缩小到最大宽度为 500 像素和 50 KB。
如何缩小和优化所有这些图像?
我正在使用UIQt项目并保存图像文件QML。以下是我所做的
auto screenshot = quick_item->grabToImage();
screenshot->saveToFile("/somepath/filename.jpeg");
// OR sometimes use like png like
screenshot->saveToFile("/somepath/filename.png");
Run Code Online (Sandbox Code Playgroud)
这在所有平台上都表现得非常好。我打开文件,图像按预期保存。
现在我的问题是:
我刚刚提到.jpeg作为文件扩展名,同时将文件名作为参数提供到saveToFile. 这可行,但是,我是否需要使用它QImageWriter来确保图像实际上以jpeg/png格式压缩?
当它是有损压缩时会发生什么jpeg?
如果我想在android中控制有损压缩,我可以做一个,image.compress(CompressFormat.JPEG, 80, stream)其中80是压缩质量的百分比?
我在我的项目之一中使用 Imagick 扩展。这对我来说是新的。
以下是我的代码。
$pdfPath = $config['upload_path'] . '/' . $fileName;
$im = new imagick();
$im->setResolution(300, 300);
$im->readImage($pdfPath);
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(100);
$im->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$im->clear();
$im->destroy();
Run Code Online (Sandbox Code Playgroud)
这使我的图像质量非常差。所有文本都转换为黑色背景。图像也无法正确显示。请参阅下图,该图是从 PDF 转换而来的。
请帮我。
使用 OpenCV,每当我将图像(来自相机流)作为 JPG 保存到磁盘时。磁盘上的文件大小(以字节为单位)根据预期的 JPEG 质量而有所不同。
但是,每当我读取图像时,无论磁盘上的文件大小如何,内存大小都保持不变。这是正常的吗?
此外,图像的磁盘和内存大小似乎存在巨大差异。我期望内存大小要小得多,相对于磁盘大小而言。
例如
import sys
import cv2
cv2.imwrite('temp.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 10])
# disk size of temp.jpg is 24kb
image = cv2.imread('temp.jpg')
# memory size is 2.7 mb
cv2.imwrite('temp.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 90])
# disk size of temp.jpg is 150kb
image = cv2.imread('temp.jpg')
# memory size is still constant at 2.7 mb
Run Code Online (Sandbox Code Playgroud)
这就是我计算内存大小的方法:
print("Image byte size :", round(sys.getsizeof(image) / (1024 * 1024), 2), "mb")
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 pagespeed 优化我的网站,我得到了使用 JPEG2000 而不是普通 JPG 的建议。所以我转换了所有图像,但是当我更改图像时,它不会显示在我的笔记本电脑上。所以我检查了“caniuse”,现在我看到这个扩展只支持手机(android和ios)
那么如何在我的网站中实现这一点呢?如果设备是手机,是否需要使用javascript将扩展名更改为jpf?
我使用基于屏幕大小的图片和 srcset,但是如果我将我的笔记本电脑上的屏幕拖得更小,这将不起作用。有谁知道如何使用这个新的 JPEG2000?
我创建了一个函数,它从数据集中获取一系列值并输出一个图.例如:
my_plot(location_dataset, min_temperature, max_temperature) 将返回函数中指定的温度范围的降水图.
假设我想保存加利福尼亚州60-70F之间温度的情节.因此,我会调用我的功能my_plot(California, 60, 70),当温度在60到70F之间时,我会得到加利福尼亚州的降水情节.
我的问题是:如何保存将函数调用为jpeg格式的图?
我知道什么plt.savefig()时候它不是调用函数的结果,但在我的情况下我该怎么做?
谢谢!
更多细节:这是我的代码(大大简化):
import matplotlib.pyplot as plt
def my_plot(location_dataset, min_temperature, max_temperature):
condition = (location_dataset['temperature'] > min_temperature) & (dataset['temperature'] <= max_temperature)
subset = location_dataset[condition] # subset the data based on the temperature range
x = subset['precipitation'] # takes the precipitation column only
plt.figure(figsize=(8, 6))
plt.plot(x)
plt.show()
Run Code Online (Sandbox Code Playgroud)
所以我把这个函数称为如下:my_plot(California, 60, 70)我得到了60-70温度范围的情节.如何在没有savefig函数定义内部的情况下保存此图(这是因为我需要更改最小和最大温度参数.
我不确定我到底在做什么,所以请给出一些建议并原谅我的错误.
我有一个byte[]调用的图像idCardImage,我做了以下操作将其转换为字符串:
String s = new String(idCardImage);
Run Code Online (Sandbox Code Playgroud)
它打印出来像这样:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAEHUlEQVQ4TzWUW49VRRCFv6rq3ufMmTNn....
Run Code Online (Sandbox Code Playgroud)
做了一些在线搜索,似乎这个图像是png基于64编码的格式.
我需要做的是将其转换为jpeg格式,然后将其存储在新的字节数组中.你能就如何用Java做一些建议吗?