2012-03-19 17 views
8

Tôi cần có khả năng nén tệp PNG vào thời gian chạy nhưng không thể tìm thấy bất kỳ thư viện nào đã sẵn sàng cho iOS có thể thực hiện điều đó. JPEG không phù hợp với tôi vì tôi cần kênh Alpha mà PNG cung cấp, và JPEG thì không. Biến PNG thành thứ mà tôi có thể sử dụng trong dự án iOS của tôi có thể nằm ngoài khả năng của tôi khi nói đến C.Thư viện để nén PNG thời gian chạy trên iOS

Chỉ cần rõ ràng hơn, tôi cần thực hiện việc này trong thời gian chạy, không biên dịch- thời gian.

+0

tôi nghĩ điều này có thể giúp bạn. http://stackoverflow.com/questions/4394491/how-to-compress-resize-image-on-iphone-os-sdk-before-uploading-to-a-server –

+0

Định dạng dữ liệu là gì trước đây bạn muốn lưu nó? Và bạn có quan tâm đến việc thoát khỏi chủ đề chính không? – Tommy

+0

@Malek Cảm ơn, nhưng mục đó tập trung vào việc thay đổi kích thước hình ảnh, không nén nó .. –

Trả lời

3

Thử ImageIO. Xem ImageIO Programming Guide

+0

Cảm ơn bạn đã trỏ Hình ảnh I/O ra - có thể hữu ích cho các dự án khác .Trong dự án này, tôi đang tìm cách nén các tệp PNG, không phải là thứ mà PNG hỗ trợ như một phần của định dạng hình ảnh. Tài liệu I/O, bạn có thể thấy rằng không có Khóa Từ điển PNG nào cung cấp quyền kiểm soát nén (http://developer.apple.com/library/ios/#documentation/graphicsimaging/Reference/CGImageProperties_Reference/Reference/reference.html#//apple_ref/doc/uid/TP40005103) - nếu nó đã làm, UIImagePNGRepresentation sẽ prob cung cấp một giao diện cho nó –

+1

@RobReuss Tôi là một chút nhầm lẫn về điều này, PNGs được nén nhưng có nhiều cách để mã hóa một PNG - do đó tại sao pngcrush và những thứ tương tự thường có khả năng nén tốt hơn bằng cách đơn giản là tốn nhiều thời gian hơn để cân nhắc các lựa chọn thay thế.Vì vậy, điều bạn muốn là một bộ mã hóa mà bạn có thể nói để dành nhiều thời gian hơn để tìm tỷ lệ nén tốt hơn là một u chỉ cần tin tưởng để sử dụng thời gian mặc định/hiệu quả thương mại của nó ra? – Tommy

+1

Xin lỗi nếu tôi không rõ. Bạn nói đúng - PNG không nén - nhưng iOS không hiển thị thông số cho phép bạn kiểm soát mức độ nén được sử dụng. Những gì tôi đang tìm kiếm là một thư viện mà tôi có thể xây dựng thành dự án mà sẽ cho phép tôi lấy một UIImage và tạo ra một PNG nén hơn được tạo ra bởi UIImagePNGRepresentation. Nếu có một cách để sử dụng pngcrush tại thời gian chạy, điều đó sẽ trả lời nhu cầu của tôi. –

1

Nếu bạn thực sự không có cách nào khác có thể bạn có thể sử dụng UIImagePNGRepresentation theo một cách như vậy mà nó lưu một file png mỏng:

// load image from the one you created 
UIImage *image = [UIImage imageNamed:@"your image name"]; 
// give it a new PNG representation from the API 
NSData *pngImage = UIImagePNGRepresentation(image); 
//save it to another place 
NSError *error = nil; 
[pngImage writeToFile:@"your path" options:NSDataWritingAtomic error:&error]; 

Và sau đó xem nếu hình ảnh mới mỏng hơn hay không. Phương pháp này hoạt động trên một mac: chỉ cần mở tệp PNG và xuất chúng sang tệp PNG khác có thể giảm kích thước của nó.

+0

Tôi nghĩ rằng bạn có thể đã hiểu lầm phần 13.2. Mục đích của việc loại trừ đó là để biện minh cho việc từ chối các ứng dụng mà mục đích duy nhất là làm hao pin hoặc tạo nhiệt - tin hay không, mọi người gửi loại đó. Bạn không nên ngại ngần khi sử dụng CPU của thiết bị để thỏa mãn niềm vui của bạn nếu nó mang lại trải nghiệm người dùng tuyệt vời - điều này đặc biệt đúng trên iPad, nơi người ta ít quan tâm đến việc bảo vệ chức năng cơ bản của thiết bị (như iPhone cần thực hiện cuộc gọi). –

+0

Đó là một ý tưởng thú vị về việc lưu lại PNG mặc dù tôi nghi ngờ nó sẽ cho tôi mức độ nén mà tôi đang tìm kiếm, vì nó chỉ là một tác dụng phụ, nhưng bạn khiến tôi tò mò và tôi sẽ kiểm tra nó. –

+0

Ok cảm ơn sự chính xác này về phần này, có lẽ tôi đã không nắm bắt được điều này bởi vì tôi không phải là song ngữ. Ít nhất, tôi không nghĩ đến những người tạo ra những ứng dụng vô dụng như vậy ... Dù sao tôi đã xóa phần này của câu trả lời. Vui lòng cho chúng tôi biết về thử nghiệm của bạn. – dulgan