diff --git a/.gitignore b/.gitignore index 250fd508..82424c84 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.zip .DS_Store .svn +gifsicle/gifsicle/ advpng/*.c advpng/*.cc advpng/*.in @@ -47,7 +48,7 @@ gifsicle/build gifsicle/configure* gifsicle/COPYING gifsicle/depcomp -gifsicle/DerivedData +DerivedData gifsicle/gifsicle.spec gifsicle/include gifsicle/INSTALL @@ -82,52 +83,6 @@ jpegoptim/redhat/jpegoptim.spec jpegtran/build jpegtran/DerivedData jpegtran/jpegtran -libjpeg/*.1 -libjpeg/*.asm -libjpeg/*.bcc -libjpeg/*.c -libjpeg/*.cfg -libjpeg/*.dj -libjpeg/*.jpg -libjpeg/*.log -libjpeg/*.mac -libjpeg/*.manx -libjpeg/*.map -libjpeg/*.mc6 -libjpeg/*.opt -libjpeg/*.sas -libjpeg/*.st -libjpeg/*.sub -libjpeg/*.txt -libjpeg/*.vc -libjpeg/*.vc6 -libjpeg/*.vc9 -libjpeg/*.vms -libjpeg/*.wat -libjpeg/aclocal.m4 -libjpeg/build -libjpeg/cderror.h -libjpeg/cdjpeg.h -libjpeg/config.guess -libjpeg/configure* -libjpeg/depcomp -libjpeg/DerivedData -libjpeg/install-sh -libjpeg/jdct.h -libjpeg/jerror.h -libjpeg/jinclude.h -libjpeg/jmemsys.h -libjpeg/jmorecfg.h -libjpeg/jpegint.h -libjpeg/jpeglib.h -libjpeg/jversion.h -libjpeg/ltmain.sh -libjpeg/Makefile.* -libjpeg/makefile.* -libjpeg/missing -libjpeg/README -libjpeg/testimg.* -libjpeg/transupp.h libpng/*-optipng.diff libpng/*.3 libpng/*.c @@ -196,3 +151,14 @@ zlib/projects zlib/qnx zlib/README zlib/win32 +imageoptim/*.lproj/Help/Help.helpindex +pngquant/build/* +pngcrush/Makefile-nolib +pngcrush/pngcrush.c.orig +imageoptim/pngout-20130221-darwin/* +gifsicle/patched +pngcrush/patched +svgo/build/ +svgo/node_modules/ +pngcrush/tmp/ +pngcrush/LICENSE diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..a26584a8 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,27 @@ +[submodule "Sparkle"] + path = Sparkle + url = https://github.com/ImageOptim/temporary-patch-Sparkle.git +[submodule "gifsicle/gifsicle"] + path = gifsicle/orig + url = https://github.com/pornel/giflossy.git +[submodule "zopfli-png/zopfli"] + path = zopfli-png/zopfli + url = https://github.com/ImageOptim/zopfli.git +[submodule "pngquant/src"] + path = pngquant/src + url = https://github.com/pornel/pngquant.git +[submodule "libjpeg/src"] + path = libjpeg/src + url = https://github.com/ImageOptim/mozjpeg-cocoa.git +[submodule "jpegoptim/src"] + path = jpegoptim/src + url = https://github.com/tjko/jpegoptim.git +[submodule "guetzli/guetzli"] + path = guetzli/guetzli + url = https://github.com/google/guetzli.git +[submodule "svgcleaner/src"] + path = svgcleaner/src + url = https://github.com/RazrFalcon/svgcleaner.git +[submodule "oxipng/oxipng"] + path = oxipng/oxipng + url = https://github.com/shssoichiro/oxipng diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..9b40810c --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at kornel@geekhood.net. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..ea67f017 --- /dev/null +++ b/LICENSE @@ -0,0 +1,280 @@ +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/README.md b/README.md index f18b7165..661e3939 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,29 @@ -#ImageOptim +# ImageOptim -[ImageOptim](http://imageoptim.com) is a GUI for lossless image optimization tools: PNGOUT, AdvPNG, Pngcrush, OptiPNG, JpegOptim, jpegrescan, jpegtran, and Gifsicle. +[ImageOptim](https://imageoptim.com) is a GUI for lossless image optimization tools: Zopfli, PNGOUT, [OxiPNG](https://lib.rs/crates/oxipng), AdvPNG, PNGCrush, [JPEGOptim](https://github.com/tjko/jpegoptim), Jpegtran, [Guetzli](https://github.com/google/guetzli), [Gifsicle](https://kornel.ski/lossygif), [SVGO](https://github.com/svg/svgo), [svgcleaner](https://github.com/RazrFalcon/svgcleaner) and [MozJPEG](https://github.com/mozilla/mozjpeg). -To get started, open `imageoptim/ImageOptim.xcodeproj`. It will automatically download and build all subprojects when run. +## Building + +Requires: + +* Xcode +* [Rust](https://rust-lang.org/) installed via [rustup](https://www.rustup.rs/) (not Homebrew). + +```sh +git clone --recursive https://imageoptim.com ImageOptim +cd ImageOptim +``` + +To get started, open `imageoptim/ImageOptim.xcodeproj`. It will automatically download and build all subprojects when run in Xcode. + +In case of build errors, these sometimes help: + +```sh +git submodule update --init +``` + +```sh +cd gifsicle # or pngquant +make clean +make +``` diff --git a/Sparkle b/Sparkle new file mode 160000 index 00000000..18186c41 --- /dev/null +++ b/Sparkle @@ -0,0 +1 @@ +Subproject commit 18186c41ef06e1fdf2a297ca197eeff6a0acfb76 diff --git a/advpng/Makefile b/advpng/Makefile index d00eb16a..6f229a8c 100755 --- a/advpng/Makefile +++ b/advpng/Makefile @@ -1,8 +1,12 @@ +build: all + +all: repng.cc repng.cc: - curl -L http://sourceforge.net/projects/advancemame/files/advancecomp/1.15/advancecomp-1.15.tar.gz/download | tar xz --strip-components=1 + curl -L https://snapshot.debian.org/archive/debian/20120101T000000Z/pool/main/a/advancecomp/advancecomp_1.15.orig.tar.gz | tar xz --strip-components=1 clean: - + install: - + +.PHONY: build all install clean diff --git a/advpng/advpng.xcodeproj/project.pbxproj b/advpng/advpng.xcodeproj/project.pbxproj index 192c6f0e..122d9052 100644 --- a/advpng/advpng.xcodeproj/project.pbxproj +++ b/advpng/advpng.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -15,7 +15,6 @@ 5A81663A0EA117B100962CF2 /* data.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166310EA117B100962CF2 /* data.cc */; }; 5A81663B0EA117B100962CF2 /* getopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166320EA117B100962CF2 /* getopt.c */; }; 5A81663C0EA117B100962CF2 /* pngex.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166330EA117B100962CF2 /* pngex.cc */; }; - 5A81663D0EA117B100962CF2 /* snstring.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166340EA117B100962CF2 /* snstring.c */; }; 5A81663E0EA117B100962CF2 /* snprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166350EA117B100962CF2 /* snprintf.c */; }; 5A8166530EA117B600962CF2 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166470EA117B600962CF2 /* error.c */; }; 5A8166560EA117B600962CF2 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A81664E0EA117B600962CF2 /* png.c */; }; @@ -38,7 +37,8 @@ 5A8166A50EA117BB00962CF2 /* OutByte.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5A81668B0EA117BB00962CF2 /* OutByte.cc */; }; 5A8166A60EA117BB00962CF2 /* WindowIn.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166910EA117BB00962CF2 /* WindowIn.cc */; }; 5A8166A70EA117BB00962CF2 /* WindowOut.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5A8166930EA117BB00962CF2 /* WindowOut.cc */; }; - 5A984B1511238220007622D7 /* liblibpng.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A7439C8111DA4EF001C2D27 /* liblibpng.dylib */; }; + 5AE3081E214E948500F8D489 /* libstatic.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A05264013D8DABD00BA0213 /* libstatic.a */; }; + DB716F751853E13D00AA7771 /* snstring.c in Sources */ = {isa = PBXBuildFile; fileRef = DB716F731853E13D00AA7771 /* snstring.c */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -70,6 +70,13 @@ remoteGlobalIDString = 5A984B2111238282007622D7; remoteInfo = download; }; + 5F3908042189D0900068035B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A19439E0FF982D4007C3324 /* libpng.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 5AC2B4D513394EDA00376783; + remoteInfo = static; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ @@ -79,7 +86,6 @@ 5A8166260EA117B100962CF2 /* compress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compress.h; sourceTree = SOURCE_ROOT; }; 5A8166270EA117B100962CF2 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = SOURCE_ROOT; }; 5A8166280EA117B100962CF2 /* data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data.h; sourceTree = SOURCE_ROOT; }; - 5A8166290EA117B100962CF2 /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file.h; sourceTree = SOURCE_ROOT; }; 5A81662A0EA117B100962CF2 /* pngex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pngex.h; sourceTree = SOURCE_ROOT; }; 5A81662B0EA117B100962CF2 /* portable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = portable.h; sourceTree = SOURCE_ROOT; }; 5A81662C0EA117B100962CF2 /* siglock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = siglock.h; sourceTree = SOURCE_ROOT; }; @@ -90,7 +96,6 @@ 5A8166310EA117B100962CF2 /* data.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data.cc; sourceTree = SOURCE_ROOT; }; 5A8166320EA117B100962CF2 /* getopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = getopt.c; sourceTree = SOURCE_ROOT; }; 5A8166330EA117B100962CF2 /* pngex.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pngex.cc; sourceTree = SOURCE_ROOT; }; - 5A8166340EA117B100962CF2 /* snstring.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 4; name = snstring.c; path = lib/snstring.c; sourceTree = SOURCE_ROOT; }; 5A8166350EA117B100962CF2 /* snprintf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = snprintf.c; sourceTree = SOURCE_ROOT; }; 5A8166460EA117B600962CF2 /* endianrw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = endianrw.h; path = lib/endianrw.h; sourceTree = SOURCE_ROOT; }; 5A8166470EA117B600962CF2 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = error.c; path = lib/error.c; sourceTree = SOURCE_ROOT; }; @@ -152,7 +157,6 @@ 5A81668A0EA117BB00962CF2 /* LZMAEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LZMAEncoder.h; sourceTree = ""; }; 5A81668B0EA117BB00962CF2 /* OutByte.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OutByte.cc; sourceTree = ""; }; 5A81668C0EA117BB00962CF2 /* OutByte.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OutByte.h; sourceTree = ""; }; - 5A81668D0EA117BB00962CF2 /* Portable.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; path = Portable.h; sourceTree = ""; }; 5A81668E0EA117BB00962CF2 /* RangeCoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RangeCoder.h; sourceTree = ""; }; 5A81668F0EA117BB00962CF2 /* RCDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCDefs.h; sourceTree = ""; }; 5A8166900EA117BB00962CF2 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; }; @@ -161,6 +165,8 @@ 5A8166930EA117BB00962CF2 /* WindowOut.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WindowOut.cc; sourceTree = ""; }; 5A8166940EA117BB00962CF2 /* WindowOut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowOut.h; sourceTree = ""; }; 8DD76FB20486AB0100D96B5E /* advpng */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = advpng; sourceTree = BUILT_PRODUCTS_DIR; }; + DB716F731853E13D00AA7771 /* snstring.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = snstring.c; sourceTree = ""; }; + DB716F741853E13D00AA7771 /* snstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snstring.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -168,7 +174,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5A984B1511238220007622D7 /* liblibpng.dylib in Frameworks */, + 5AE3081E214E948500F8D489 /* libstatic.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -183,6 +189,7 @@ 5A27BA02139B08A00095FC2F /* release.xcconfig */, 5A27BA03139B08A00095FC2F /* debug.xcconfig */, 1AB674ADFE9D54B511CA2CBB /* Products */, + 5AE3081A214E948500F8D489 /* Frameworks */, ); name = advpng; sourceTree = ""; @@ -198,7 +205,6 @@ 5A8166310EA117B100962CF2 /* data.cc */, 5A8166280EA117B100962CF2 /* data.h */, 5A81662F0EA117B100962CF2 /* file.cc */, - 5A8166290EA117B100962CF2 /* file.h */, 5A8166320EA117B100962CF2 /* getopt.c */, 5A8166330EA117B100962CF2 /* pngex.cc */, 5A81662A0EA117B100962CF2 /* pngex.h */, @@ -207,7 +213,6 @@ 5A81662E0EA117B100962CF2 /* siglock.cc */, 5A81662C0EA117B100962CF2 /* siglock.h */, 5A8166350EA117B100962CF2 /* snprintf.c */, - 5A8166340EA117B100962CF2 /* snstring.c */, ); name = advancecomp; sourceTree = ""; @@ -240,6 +245,8 @@ 5A81664B0EA117B600962CF2 /* fz.h */, 5A81664E0EA117B600962CF2 /* png.c */, 5A81664F0EA117B600962CF2 /* png.h */, + DB716F731853E13D00AA7771 /* snstring.c */, + DB716F741853E13D00AA7771 /* snstring.h */, ); path = lib; sourceTree = SOURCE_ROOT; @@ -300,7 +307,6 @@ 5A81668A0EA117BB00962CF2 /* LZMAEncoder.h */, 5A81668B0EA117BB00962CF2 /* OutByte.cc */, 5A81668C0EA117BB00962CF2 /* OutByte.h */, - 5A81668D0EA117BB00962CF2 /* Portable.h */, 5A81668E0EA117BB00962CF2 /* RangeCoder.h */, 5A81668F0EA117BB00962CF2 /* RCDefs.h */, 5A8166910EA117BB00962CF2 /* WindowIn.cc */, @@ -311,6 +317,13 @@ path = 7z; sourceTree = SOURCE_ROOT; }; + 5AE3081A214E948500F8D489 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXLegacyTarget section */ @@ -340,6 +353,7 @@ buildRules = ( ); dependencies = ( + 5F3908052189D0900068035B /* PBXTargetDependency */, 5A984B141123821A007622D7 /* PBXTargetDependency */, 5A984B2C112382B4007622D7 /* PBXTargetDependency */, ); @@ -356,7 +370,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 0460; + LastUpgradeCheck = 1510; }; buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "advpng" */; compatibilityVersion = "Xcode 3.2"; @@ -434,7 +448,7 @@ 5A8166360EA117B100962CF2 /* repng.cc in Sources */, 5A8166370EA117B100962CF2 /* siglock.cc in Sources */, 5A81663E0EA117B100962CF2 /* snprintf.c in Sources */, - 5A81663D0EA117B100962CF2 /* snstring.c in Sources */, + DB716F751853E13D00AA7771 /* snstring.c in Sources */, 5A8166A60EA117BB00962CF2 /* WindowIn.cc in Sources */, 5A8166A70EA117BB00962CF2 /* WindowOut.cc in Sources */, ); @@ -453,6 +467,11 @@ target = 5A984B2111238282007622D7 /* download */; targetProxy = 5A984B2B112382B4007622D7 /* PBXContainerItemProxy */; }; + 5F3908052189D0900068035B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = static; + targetProxy = 5F3908042189D0900068035B /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -460,16 +479,16 @@ isa = XCBuildConfiguration; buildSettings = { GCC_DYNAMIC_NO_PIC = NO; - INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = advpng; + SKIP_INSTALL = YES; }; name = Debug; }; 1DEB928708733DD80010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = advpng; + SKIP_INSTALL = YES; }; name = Release; }; @@ -477,7 +496,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27BA03139B08A00095FC2F /* debug.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_CPP_EXCEPTIONS = YES; GCC_ENABLE_CPP_RTTI = NO; @@ -485,7 +504,10 @@ GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; GCC_INLINES_ARE_PRIVATE_EXTERN = NO; GCC_OBJC_CALL_CXX_CDTORS = NO; - GCC_PREPROCESSOR_DEFINITIONS = HAVE_CONFIG_H; + GCC_PREPROCESSOR_DEFINITIONS = ( + HAVE_CONFIG_H, + USE_ERROR_SILENT, + ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_THREADSAFE_STATICS = NO; GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; @@ -495,8 +517,12 @@ GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; GCC_WARN_SIGN_COMPARE = NO; GCC_WARN_UNINITIALIZED_AUTOS = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/", + ); + ONLY_ACTIVE_ARCH = YES; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - USER_HEADER_SEARCH_PATHS = 7z/../; }; name = Debug; }; @@ -504,34 +530,23 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27BA02139B08A00095FC2F /* release.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_CPP_EXCEPTIONS = YES; - GCC_ENABLE_CPP_RTTI = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; - GCC_OBJC_CALL_CXX_CDTORS = NO; GCC_PREPROCESSOR_DEFINITIONS = ( HAVE_CONFIG_H, NDEBUG, + USE_ERROR_SILENT, + ); + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/", ); - GCC_THREADSAFE_STATICS = NO; - GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_SIGN_COMPARE = NO; - "OTHER_CFLAGS[arch=x86_64]" = "-mtune=core2"; - PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO; - USER_HEADER_SEARCH_PATHS = 7z/../; }; name = Release; }; 5A984B2211238282007622D7 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; PRODUCT_NAME = download; + SDKROOT = macosx; }; name = Debug; }; @@ -540,6 +555,7 @@ buildSettings = { COPY_PHASE_STRIP = YES; PRODUCT_NAME = download; + SDKROOT = macosx; }; name = Release; }; diff --git a/gifsicle/Makefile b/gifsicle/Makefile old mode 100755 new mode 100644 index 20c47d30..4486f9f7 --- a/gifsicle/Makefile +++ b/gifsicle/Makefile @@ -1,10 +1,16 @@ +build: all -src/gifsicle.c: - curl http://www.lcdf.org/gifsicle/gifsicle-1.68.tar.gz | tar xz --strip-components=1 --exclude=Makefile - patch -p1 < gifsicle-1.64-imageoptim.patch +all: patched -clean: - test ./src/gifsicle.c && rm -rf ./src +patched: orig/src + -rm -rf gifsicle + cp -R orig gifsicle + patch --forward -p1 -d gifsicle < gifsicle-1.89-imageoptim.patch && touch patched + +orig/src: ../.gitmodules + ../scripts/fetch-submodule orig && touch orig/src -install: +clean: + -rm -rf patched gifsicle +.PHONY: build all install clean diff --git a/gifsicle/config.h b/gifsicle/config.h index 02391992..b62d7176 100644 --- a/gifsicle/config.h +++ b/gifsicle/config.h @@ -4,17 +4,14 @@ #ifndef GIFSICLE_CONFIG_H #define GIFSICLE_CONFIG_H -/* Define when using the debugging malloc library. */ -/* #undef DMALLOC */ - /* Define to the number of arguments to gettimeofday (gifview only). */ /* #undef GETTIMEOFDAY_PROTO */ /* Define if GIF LZW compression is off. */ /* #undef GIF_UNGIF */ -/* Define if intXX_t types are not available. */ -/* #undef HAVE_FAKE_INT_TYPES */ +/* Define to 1 if the system has the type `int64_t'. */ +#define HAVE_INT64_T 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 @@ -25,6 +22,9 @@ /* Define to 1 if you have the `mkstemp' function. */ #define HAVE_MKSTEMP 1 +/* Define to 1 if you have the `pow' function. */ +#define HAVE_POW 1 + /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 @@ -62,28 +62,28 @@ /* #undef HAVE_U_INT_TYPES */ /* Define to write GIFs to stdout even when stdout is a terminal. */ -/* #undef OUTPUT_GIF_TO_TERMINAL */ +#define OUTPUT_GIF_TO_TERMINAL /* Name of package */ #define PACKAGE "gifsicle" /* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" +#define PACKAGE_BUGREPORT "pornel@pornel.net" /* Define to the full name of this package. */ -#define PACKAGE_NAME "" +#define PACKAGE_NAME "gifsicle" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "" +#define PACKAGE_STRING "gifsicle 1.88-lossy" /* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "" +#define PACKAGE_TARNAME "gifsicle" /* Define to the home page for this package. */ -#define PACKAGE_URL "" +#define PACKAGE_URL "https://pornel.net/lossygif" /* Define to the version of this package. */ -#define PACKAGE_VERSION "" +#define PACKAGE_VERSION "1.88" /* Pathname separator character ('/' on Unix). */ #define PATHNAME_SEPARATOR '/' @@ -94,11 +94,17 @@ /* The size of `unsigned int', as computed by sizeof. */ #define SIZEOF_UNSIGNED_INT 4 +/* The size of `unsigned long', as computed by sizeof. */ +#define SIZEOF_UNSIGNED_LONG 8 + +/* The size of `void *', as computed by sizeof. */ +#define SIZEOF_VOID_P 8 + /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "1.63-imageoptim" +#define VERSION "1.88" /* Define if X is not available. */ #define X_DISPLAY_MISSING 1 @@ -112,24 +118,15 @@ /* #undef inline */ #endif +#include + #ifdef __cplusplus extern "C" { #endif -/* Use either the clean-failing malloc library in fmalloc.c, or the debugging - malloc library in dmalloc.c. */ -#ifdef DMALLOC -# include "dmalloc.h" -# define Gif_DeleteFunc (&debug_free) -# define Gif_DeleteArrayFunc (&debug_free) -#else -# include -# define xmalloc(s) fail_die_malloc((s),__FILE__,__LINE__) -# define xrealloc(p,s) fail_die_realloc((p),(s),__FILE__,__LINE__) -# define xfree free -void *fail_die_malloc(size_t, const char *, int); -void *fail_die_realloc(void *, size_t, const char *, int); -#endif +/* Use the clean-failing malloc library in fmalloc.c. */ +#define GIF_ALLOCATOR_DEFINED 1 +#define Gif_Free free /* Prototype strerror if we don't have it. */ #ifndef HAVE_STRERROR @@ -142,4 +139,16 @@ char *strerror(int errno); # define inline inline #endif +/* Need _setmode under MS-DOS, to set stdin/stdout to binary mode */ +/* Need _fsetmode under OS/2 for the same reason */ +/* Windows has _isatty and _snprintf, not the normal versions */ +#if defined(_MSDOS) || defined(_WIN32) || defined(__EMX__) || defined(__DJGPP__) +# include +# include +# define isatty _isatty +# define snprintf _snprintf +#endif + +#define GIF_NO_UNOPTIMIZE 1 + #endif /* GIFSICLE_CONFIG_H */ diff --git a/gifsicle/gifsicle-1.64-imageoptim.patch b/gifsicle/gifsicle-1.64-imageoptim.patch deleted file mode 100644 index 72ab2bca..00000000 --- a/gifsicle/gifsicle-1.64-imageoptim.patch +++ /dev/null @@ -1,252 +0,0 @@ -diff --git a/src/dmalloc.c b/src/dmalloc.c -index f84549e..e85d8d7 100644 ---- a/src/dmalloc.c -+++ b/src/dmalloc.c -@@ -11,7 +11,7 @@ typedef struct bucket { - #define NBUCK 5779 - static bucket *buckets[NBUCK]; - static int event_number; --static FILE *verbose_out = 0; -+#define verbose_out 0 - - size_t dmalloc_live_memory; - -@@ -38,7 +38,7 @@ debug_malloc_id(size_t k, const char *file, int line) - p = (void *)(((char *)p) + sizeof(bucket)); - /* memset(p, 99, b->size); */ - if (verbose_out) -- fprintf(verbose_out, "%5d: %p +%-7d (%s:%d) ++ %ld\n", event_number, -+ fprintf(verbose_out, "%5d: %p +%-7ld (%s:%d) ++ %ld\n", event_number, - p, b->size, file, line, (long) dmalloc_live_memory); - event_number++; - return p; -@@ -171,7 +171,7 @@ dmalloc_report(void) - { - int i; - bucket *b; -- fprintf(stderr, "dmalloc: %d bytes allocated\n", dmalloc_live_memory); -+ fprintf(stderr, "dmalloc: %ld bytes allocated\n", dmalloc_live_memory); - for (i = 0; i < NBUCK; i++) - for (b = buckets[i]; b; b = b->next) - fprintf(stderr, "dmalloc: %p +%-7ld (%s:%d)\n", -@@ -183,8 +183,4 @@ dmalloc_report(void) - void - dmalloc_verbose(const char *out_name) - { -- if (out_name) -- verbose_out = fopen(out_name, "w"); -- else -- verbose_out = stdout; - } -diff --git a/src/gifread.c b/src/gifread.c -index 2518230..7006a4e 100644 ---- a/src/gifread.c -+++ b/src/gifread.c -@@ -513,7 +513,7 @@ uncompress_image(Gif_Context *gfc, Gif_Image *gfi, Gif_Reader *grr) - int - Gif_FullUncompressImage(Gif_Image *gfi, Gif_ReadErrorHandler h, void *hthunk) - { -- Gif_Context gfc; -+ Gif_Context gfc = {}; - Gif_Stream fake_gfs; - Gif_Reader grr; - int ok = 0; -diff --git a/src/gifsicle.c b/src/gifsicle.c -index 146110a..7dc0521 100644 ---- a/src/gifsicle.c -+++ b/src/gifsicle.c -@@ -33,7 +33,6 @@ Gt_Frameset *nested_frames = 0; - - Gif_Stream *input = 0; - const char *input_name = 0; --static int unoptimizing = 0; - - static int gif_read_flags = 0; - static int nextfile = 0; -@@ -294,7 +293,6 @@ const Clp_Option options[] = { - Clp_Negate }, - { "transparent", 't', 't', COLOR_TYPE, Clp_Negate }, - -- { "unoptimize", 'U', UNOPTIMIZE_OPT, 0, Clp_Negate }, - { "use-colormap", 0, USE_COLORMAP_OPT, Clp_ValString, Clp_Negate }, - - { "verbose", 'V', VERBOSE_OPT, 0, Clp_Negate }, -@@ -706,17 +704,6 @@ input_stream(const char *name) - add_frame(frames, -1, gfs, gfs->images[i]); - def_frame = old_def_frame; - -- if (unoptimizing) -- if (!Gif_FullUnoptimize(gfs, GIF_UNOPTIMIZE_SIMPLEST_DISPOSAL)) { -- static int context = 0; -- warning(1, "GIF too complex to unoptimize", name); -- if (!context) { -- warncontext(1, "(The reason was local color tables or complex transparency."); -- warncontext(1, "Try running the GIF through 'gifsicle --colors=255' first.)"); -- } -- context = 1; -- } -- - apply_color_transforms(input_transforms, gfs); - gfs->refcount++; - -@@ -779,69 +766,6 @@ set_new_fixed_colormap(const char *name) - def_output_data.colormap_fixed = read_colormap_file(name, 0); - } - --static void --do_set_colormap(Gif_Stream *gfs, Gif_Colormap *gfcm) --{ -- colormap_image_func image_func; -- if (active_output_data.colormap_dither) -- image_func = colormap_image_floyd_steinberg; -- else -- image_func = colormap_image_posterize; -- colormap_stream(gfs, gfcm, image_func); --} -- --static void --do_colormap_change(Gif_Stream *gfs) --{ -- if (active_output_data.colormap_fixed) -- do_set_colormap(gfs, active_output_data.colormap_fixed); -- -- if (active_output_data.colormap_size > 0) { -- int nhist; -- Gif_Color *hist; -- Gif_Colormap *(*adapt_func)(Gif_Color *, int, int); -- Gif_Colormap *new_cm; -- -- /* set up the histogram */ -- { -- int i, any_locals = 0; -- for (i = 0; i < gfs->nimages; i++) -- if (gfs->images[i]->local) -- any_locals = 1; -- hist = histogram(gfs, &nhist); -- if (nhist <= active_output_data.colormap_size && !any_locals) { -- warning(1, "trivial adaptive palette (only %d colors in source)", nhist); -- return; -- } -- } -- -- switch (active_output_data.colormap_algorithm) { -- -- case COLORMAP_DIVERSITY: -- adapt_func = &colormap_flat_diversity; -- break; -- -- case COLORMAP_BLEND_DIVERSITY: -- adapt_func = &colormap_blend_diversity; -- break; -- -- case COLORMAP_MEDIAN_CUT: -- adapt_func = &colormap_median_cut; -- break; -- -- default: -- fatal_error("can't happen"); -- -- } -- -- new_cm = (*adapt_func)(hist, nhist, active_output_data.colormap_size); -- do_set_colormap(gfs, new_cm); -- -- Gif_DeleteArray(hist); -- Gif_DeleteColormap(new_cm); -- } --} -- - - /***** - * output GIF images -@@ -893,8 +817,7 @@ merge_and_write_frames(const char *outfile, int f1, int f2) - verbose_open('[', outfile ? outfile : "#stdout#"); - active_output_data.active_output_name = outfile; - -- colormap_change = active_output_data.colormap_size > 0 -- || active_output_data.colormap_fixed; -+ colormap_change = 0; - warn_local_colormaps = !colormap_change; - - compress_immediately = 1; -@@ -917,8 +840,6 @@ merge_and_write_frames(const char *outfile, int f1, int f2) - else if (active_output_data.scaling == GT_SCALING_RESIZE_FIT) - resize_stream(out, active_output_data.resize_width, - active_output_data.resize_height, 1); -- if (colormap_change) -- do_colormap_change(out); - if (output_transforms) - apply_color_transforms(output_transforms, out); - if (active_output_data.optimizing & GT_OPT_MASK) -@@ -1302,16 +1223,6 @@ main(int argc, char *argv[]) - dmalloc_verbose("fudge"); - #endif - -- /* Yep, I'm an idiot. -- GIF dimensions are unsigned 16-bit integers. I assume that these -- numbers will fit in an 'int'. This assertion tests that assumption. -- Really I should go through & change everything over, but it doesn't -- seem worth my time. */ -- { -- uint16_t m = 0xFFFFU; -- int i = m; -- assert(i > 0 && "configuration/lameness failure! bug the author!"); -- } - - while (1) { - int opt = Clp_Next(clp); -@@ -1641,11 +1552,6 @@ main(int argc, char *argv[]) - break; - } - -- case UNOPTIMIZE_OPT: -- UNCHECKED_MARK_CH(input, CH_UNOPTIMIZE); -- unoptimizing = clp->negated ? 0 : 1; -- break; -- - /* WHOLE-GIF OPTIONS */ - - case CAREFUL_OPT: { -diff --git a/src/quantize.c b/src/quantize.c -index aa0859c..a1662cd 100644 ---- a/src/quantize.c -+++ b/src/quantize.c -@@ -101,7 +101,7 @@ histogram(Gif_Stream *gfs, int *nhist_store) - { - Gif_Histogram hist; - Gif_Color *linear; -- Gif_Color transparent_color; -+ Gif_Color transparent_color= {}; - unsigned long ntransparent = 0; - unsigned long nbackground = 0; - int x, y, i; -@@ -633,10 +633,10 @@ hash_color(int red, int green, int blue, - new_cm_grayscale = 0; - } - -- /* find the closest color in the new colormap */ -+ if (new_cm)/* find the closest color in the new colormap */ - { - Gif_Color *col = new_cm->col; -- int ncol = new_cm->ncol, i, found; -+ int ncol = new_cm->ncol, i, found=0; - uint32_t min_dist = 0xFFFFFFFFU; - - if (new_cm_grayscale) { -@@ -678,6 +678,7 @@ hash_color(int red, int green, int blue, - trav->pixel = found; - return found; - } -+ return 0; - } - - -@@ -863,7 +864,7 @@ try_assign_transparency(Gif_Image *gfi, Gif_Colormap *old_cm, uint8_t *new_data, - int i, j; - int transparent = gfi->transparent; - int new_transparent = -1; -- Gif_Color transp_value; -+ Gif_Color transp_value={}; - - if (transparent < 0) - return 0; diff --git a/gifsicle/gifsicle-1.89-imageoptim.patch b/gifsicle/gifsicle-1.89-imageoptim.patch new file mode 100644 index 00000000..efd2783b --- /dev/null +++ b/gifsicle/gifsicle-1.89-imageoptim.patch @@ -0,0 +1,151 @@ +diff --git a/src/gifsicle.c b/src/gifsicle.c +index ca3f388..8d11d17 100644 +--- a/src/gifsicle.c ++++ b/src/gifsicle.c +@@ -33,7 +33,6 @@ Gt_Frameset *nested_frames = 0; + + Gif_Stream *input = 0; + const char *input_name = 0; +-static int unoptimizing = 0; + + const int GIFSICLE_DEFAULT_THREAD_COUNT = 8; + int thread_count = 0; +@@ -326,7 +325,6 @@ const Clp_Option options[] = { + Clp_Negate }, + { "transparent", 't', 't', COLOR_TYPE, Clp_Negate }, + +- { "unoptimize", 'U', UNOPTIMIZE_OPT, 0, Clp_Negate }, + { "use-colormap", 0, USE_COLORMAP_OPT, Clp_ValString, Clp_Negate }, + + { "verbose", 'V', VERBOSE_OPT, 0, Clp_Negate }, +@@ -760,18 +758,6 @@ input_stream(const char *name) + add_frame(frames, gfs, gfs->images[i]); + def_frame = old_def_frame; + +- if (unoptimizing) +- if (!Gif_FullUnoptimize(gfs, GIF_UNOPTIMIZE_SIMPLEST_DISPOSAL)) { +- static int context = 0; +- if (!context) { +- lwarning(name, "GIF too complex to unoptimize\n" +- " (The reason was local color tables or complex transparency.\n" +- " Try running the GIF through % first.)"); +- context = 1; +- } else +- lwarning(name, "GIF too complex to unoptimize"); +- } +- + apply_color_transforms(input_transforms, gfs); + gfs->refcount++; + +@@ -840,62 +826,6 @@ set_new_fixed_colormap(const char *name) + def_output_data.colormap_fixed = read_colormap_file(name, 0); + } + +-static void +-do_colormap_change(Gif_Stream *gfs) +-{ +- if (active_output_data.colormap_fixed || active_output_data.colormap_size > 0) +- kc_set_gamma(active_output_data.colormap_gamma_type, +- active_output_data.colormap_gamma); +- +- if (active_output_data.colormap_fixed) +- colormap_stream(gfs, active_output_data.colormap_fixed, +- &active_output_data); +- +- if (active_output_data.colormap_size > 0) { +- kchist kch; +- Gif_Colormap* (*adapt_func)(kchist*, Gt_OutputData*); +- Gif_Colormap *new_cm; +- +- /* set up the histogram */ +- { +- uint32_t ntransp; +- int i, any_locals = 0; +- for (i = 0; i < gfs->nimages; i++) +- if (gfs->images[i]->local) +- any_locals = 1; +- kchist_make(&kch, gfs, &ntransp); +- if (kch.n <= active_output_data.colormap_size +- && !any_locals +- && !active_output_data.colormap_fixed) { +- warning(1, "trivial adaptive palette (only %d colors in source)", kch.n); +- kchist_cleanup(&kch); +- return; +- } +- active_output_data.colormap_needs_transparency = ntransp > 0; +- } +- +- switch (active_output_data.colormap_algorithm) { +- case COLORMAP_DIVERSITY: +- adapt_func = &colormap_flat_diversity; +- break; +- case COLORMAP_BLEND_DIVERSITY: +- adapt_func = &colormap_blend_diversity; +- break; +- case COLORMAP_MEDIAN_CUT: +- adapt_func = &colormap_median_cut; +- break; +- default: +- fatal_error("can't happen"); +- } +- +- new_cm = (*adapt_func)(&kch, &active_output_data); +- colormap_stream(gfs, new_cm, &active_output_data); +- +- Gif_DeleteColormap(new_cm); +- kchist_cleanup(&kch); +- } +-} +- + + /***** + * output GIF images +@@ -946,8 +876,7 @@ merge_and_write_frames(const char *outfile, int f1, int f2) + verbose_open('[', outfile ? outfile : "#stdout#"); + active_output_data.active_output_name = outfile; + +- colormap_change = active_output_data.colormap_size > 0 +- || active_output_data.colormap_fixed; ++ colormap_change = 0; + warn_local_colormaps = !colormap_change; + + if (!(active_output_data.scaling +@@ -974,8 +903,6 @@ merge_and_write_frames(const char *outfile, int f1, int f2) + active_output_data.scaling == GT_SCALING_RESIZE_FIT, + active_output_data.scale_method, + active_output_data.scale_colors); +- if (colormap_change) +- do_colormap_change(out); + if (output_transforms) + apply_color_transforms(output_transforms, out); + if (active_output_data.optimizing & GT_OPT_MASK) +@@ -1408,17 +1335,6 @@ main(int argc, char *argv[]) + pthread_mutex_init(&kd3_sort_lock, 0); + #endif + +- /* Yep, I'm an idiot. +- GIF dimensions are unsigned 16-bit integers. I assume that these +- numbers will fit in an 'int'. This assertion tests that assumption. +- Really I should go through & change everything over, but it doesn't +- seem worth my time. */ +- { +- uint16_t m = 0xFFFFU; +- int i = m; +- assert(i > 0 && "configuration/lameness failure! bug the author!"); +- } +- + while (1) { + int opt = Clp_Next(clp); + switch (opt) { +@@ -1755,11 +1671,6 @@ main(int argc, char *argv[]) + break; + } + +- case UNOPTIMIZE_OPT: +- UNCHECKED_MARK_CH(input, CH_UNOPTIMIZE); +- unoptimizing = clp->negated ? 0 : 1; +- break; +- + case THREADS_OPT: + if (clp->negated) + thread_count = 0; diff --git a/gifsicle/gifsicle.xcodeproj/project.pbxproj b/gifsicle/gifsicle.xcodeproj/project.pbxproj index 3073f560..59c79c53 100644 --- a/gifsicle/gifsicle.xcodeproj/project.pbxproj +++ b/gifsicle/gifsicle.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,19 +13,19 @@ 5A4553EB1025E50700A69944 /* support.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4553D91025E50700A69944 /* support.c */; }; 5A4553EC1025E50700A69944 /* merge.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4553DA1025E50700A69944 /* merge.c */; }; 5A4553ED1025E50700A69944 /* optimize.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4553DB1025E50700A69944 /* optimize.c */; }; - 5A4553EE1025E50700A69944 /* dmalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4553DC1025E50700A69944 /* dmalloc.c */; }; 5A4553EF1025E50700A69944 /* gifwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4553DD1025E50700A69944 /* gifwrite.c */; }; 5A4553F11025E50700A69944 /* gifsicle.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4553DF1025E50700A69944 /* gifsicle.c */; }; 5A4554541025E76F00A69944 /* clp.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4554531025E76F00A69944 /* clp.c */; }; 5A4554AC1025E97100A69944 /* xform.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A4553DE1025E50700A69944 /* xform.c */; }; + 5AD92F841B45F54600FE17B0 /* quantize.c in Sources */ = {isa = PBXBuildFile; fileRef = 5AD92F831B45F54600FE17B0 /* quantize.c */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 5A20CD03112396010000400D /* PBXContainerItemProxy */ = { + 5AD202AC1B52A5CE000D4FF2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5A20CCFF112395FB0000400D; + remoteGlobalIDString = 5AD202A81B52A5AB000D4FF2; remoteInfo = download; }; /* End PBXContainerItemProxy section */ @@ -33,17 +33,17 @@ /* Begin PBXFileReference section */ 5A27B9D0139B07DA0095FC2F /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = SOURCE_ROOT; }; 5A27B9D3139B07EA0095FC2F /* debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = SOURCE_ROOT; }; - 5A4553D01025E50700A69944 /* gifread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gifread.c; path = src/gifread.c; sourceTree = ""; }; - 5A4553D21025E50700A69944 /* giffunc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = giffunc.c; path = src/giffunc.c; sourceTree = ""; }; - 5A4553D61025E50700A69944 /* fmalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fmalloc.c; path = src/fmalloc.c; sourceTree = ""; }; - 5A4553D91025E50700A69944 /* support.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = support.c; path = src/support.c; sourceTree = ""; }; - 5A4553DA1025E50700A69944 /* merge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = merge.c; path = src/merge.c; sourceTree = ""; }; - 5A4553DB1025E50700A69944 /* optimize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = optimize.c; path = src/optimize.c; sourceTree = ""; }; - 5A4553DC1025E50700A69944 /* dmalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dmalloc.c; path = src/dmalloc.c; sourceTree = ""; }; - 5A4553DD1025E50700A69944 /* gifwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.c; name = gifwrite.c; path = src/gifwrite.c; sourceTree = ""; }; - 5A4553DE1025E50700A69944 /* xform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xform.c; path = src/xform.c; sourceTree = ""; }; - 5A4553DF1025E50700A69944 /* gifsicle.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.c; name = gifsicle.c; path = src/gifsicle.c; sourceTree = ""; }; - 5A4554531025E76F00A69944 /* clp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = clp.c; path = src/clp.c; sourceTree = ""; }; + 5A4553D01025E50700A69944 /* gifread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gifread.c; path = gifsicle/src/gifread.c; sourceTree = ""; }; + 5A4553D21025E50700A69944 /* giffunc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = giffunc.c; path = gifsicle/src/giffunc.c; sourceTree = ""; }; + 5A4553D61025E50700A69944 /* fmalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fmalloc.c; path = gifsicle/src/fmalloc.c; sourceTree = ""; }; + 5A4553D91025E50700A69944 /* support.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = support.c; path = gifsicle/src/support.c; sourceTree = ""; }; + 5A4553DA1025E50700A69944 /* merge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = merge.c; path = gifsicle/src/merge.c; sourceTree = ""; }; + 5A4553DB1025E50700A69944 /* optimize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = optimize.c; path = gifsicle/src/optimize.c; sourceTree = ""; }; + 5A4553DD1025E50700A69944 /* gifwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.c; name = gifwrite.c; path = gifsicle/src/gifwrite.c; sourceTree = ""; }; + 5A4553DE1025E50700A69944 /* xform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = xform.c; path = gifsicle/src/xform.c; sourceTree = ""; }; + 5A4553DF1025E50700A69944 /* gifsicle.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.c; name = gifsicle.c; path = gifsicle/src/gifsicle.c; sourceTree = ""; }; + 5A4554531025E76F00A69944 /* clp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = clp.c; path = gifsicle/src/clp.c; sourceTree = ""; }; + 5AD92F831B45F54600FE17B0 /* quantize.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quantize.c; path = gifsicle/src/quantize.c; sourceTree = ""; }; 8DD76FB20486AB0100D96B5E /* gifsicle */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = gifsicle; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -72,8 +72,8 @@ 08FB7795FE84155DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( + 5AD92F831B45F54600FE17B0 /* quantize.c */, 5A4554531025E76F00A69944 /* clp.c */, - 5A4553DC1025E50700A69944 /* dmalloc.c */, 5A4553D61025E50700A69944 /* fmalloc.c */, 5A4553D21025E50700A69944 /* giffunc.c */, 5A4553D01025E50700A69944 /* gifread.c */, @@ -98,13 +98,14 @@ /* End PBXGroup section */ /* Begin PBXLegacyTarget section */ - 5A20CCFF112395FB0000400D /* download */ = { + 5AD202A81B52A5AB000D4FF2 /* download */ = { isa = PBXLegacyTarget; buildArgumentsString = "$(ACTION)"; - buildConfigurationList = 5A20CD071123961F0000400D /* Build configuration list for PBXLegacyTarget "download" */; + buildConfigurationList = 5AD202AB1B52A5AB000D4FF2 /* Build configuration list for PBXLegacyTarget "download" */; buildPhases = ( ); buildToolPath = /usr/bin/make; + buildWorkingDirectory = ""; dependencies = ( ); name = download; @@ -124,7 +125,7 @@ buildRules = ( ); dependencies = ( - 5A20CD04112396010000400D /* PBXTargetDependency */, + 5AD202AD1B52A5CE000D4FF2 /* PBXTargetDependency */, ); name = gifsicle; productInstallPath = "$(HOME)/bin"; @@ -138,7 +139,8 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; }; buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "gifsicle" */; compatibilityVersion = "Xcode 3.2"; @@ -155,7 +157,7 @@ projectRoot = ""; targets = ( 8DD76FA90486AB0100D96B5E /* gifsicle */, - 5A20CCFF112395FB0000400D /* download */, + 5AD202A81B52A5AB000D4FF2 /* download */, ); }; /* End PBXProject section */ @@ -166,9 +168,9 @@ buildActionMask = 2147483647; files = ( 5A4554541025E76F00A69944 /* clp.c in Sources */, - 5A4553EE1025E50700A69944 /* dmalloc.c in Sources */, 5A4553E81025E50700A69944 /* fmalloc.c in Sources */, 5A4553E41025E50700A69944 /* giffunc.c in Sources */, + 5AD92F841B45F54600FE17B0 /* quantize.c in Sources */, 5A4553E21025E50700A69944 /* gifread.c in Sources */, 5A4553F11025E50700A69944 /* gifsicle.c in Sources */, 5A4553EF1025E50700A69944 /* gifwrite.c in Sources */, @@ -182,10 +184,10 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 5A20CD04112396010000400D /* PBXTargetDependency */ = { + 5AD202AD1B52A5CE000D4FF2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 5A20CCFF112395FB0000400D /* download */; - targetProxy = 5A20CD03112396010000400D /* PBXContainerItemProxy */; + target = 5AD202A81B52A5AB000D4FF2 /* download */; + targetProxy = 5AD202AC1B52A5CE000D4FF2 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -211,12 +213,15 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27B9D3139B07EA0095FC2F /* debug.xcconfig */; buildSettings = { + ENABLE_TESTABILITY = YES; GCC_PREPROCESSOR_DEFINITIONS = HAVE_CONFIG_H; GCC_THREADSAFE_STATICS = NO; HEADER_SEARCH_PATHS = ( ., - include/, + gifsicle/include/, ); + ONLY_ACTIVE_ARCH = YES; + SKIP_INSTALL = YES; }; name = Debug; }; @@ -232,24 +237,23 @@ GCC_THREADSAFE_STATICS = NO; HEADER_SEARCH_PATHS = ( ., - include/, + gifsicle/include/, ); + SKIP_INSTALL = YES; }; name = Release; }; - 5A20CD00112395FB0000400D /* Debug */ = { + 5AD202A91B52A5AB000D4FF2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; - PRODUCT_NAME = download; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; }; - 5A20CD01112395FB0000400D /* Release */ = { + 5AD202AA1B52A5AB000D4FF2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = YES; - PRODUCT_NAME = download; + PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; @@ -274,11 +278,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5A20CD071123961F0000400D /* Build configuration list for PBXLegacyTarget "download" */ = { + 5AD202AB1B52A5AB000D4FF2 /* Build configuration list for PBXLegacyTarget "download" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5A20CD00112395FB0000400D /* Debug */, - 5A20CD01112395FB0000400D /* Release */, + 5AD202A91B52A5AB000D4FF2 /* Debug */, + 5AD202AA1B52A5AB000D4FF2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/gifsicle/orig b/gifsicle/orig new file mode 160000 index 00000000..ad823b82 --- /dev/null +++ b/gifsicle/orig @@ -0,0 +1 @@ +Subproject commit ad823b820f5d6b667e6c34985d9be033a7ae5d9b diff --git a/guetzli/Makefile b/guetzli/Makefile new file mode 100644 index 00000000..d8c0123e --- /dev/null +++ b/guetzli/Makefile @@ -0,0 +1,9 @@ +build: all + +all: guetzli/src + +guetzli/src: ../.gitmodules + ../scripts/fetch-submodule guetzli && touch guetzli/src + +.PHONY: build all install clean + diff --git a/guetzli/guetzli b/guetzli/guetzli new file mode 160000 index 00000000..214f2bb4 --- /dev/null +++ b/guetzli/guetzli @@ -0,0 +1 @@ +Subproject commit 214f2bb42abf5a577c079d00add5d6cc470620d3 diff --git a/guetzli/guetzli.xcodeproj/project.pbxproj b/guetzli/guetzli.xcodeproj/project.pbxproj new file mode 100644 index 00000000..d38e33e5 --- /dev/null +++ b/guetzli/guetzli.xcodeproj/project.pbxproj @@ -0,0 +1,488 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + D047E4F31E7D86AD0036F96B /* butteraugli_comparator.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4871E7D7F070036F96B /* butteraugli_comparator.cc */; }; + D047E4F71E7D86AD0036F96B /* dct_double.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E48B1E7D7F070036F96B /* dct_double.cc */; }; + D047E4F91E7D86AD0036F96B /* debug_print.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E48D1E7D7F070036F96B /* debug_print.cc */; }; + D047E4FB1E7D86AD0036F96B /* entropy_encode.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E48F1E7D7F070036F96B /* entropy_encode.cc */; }; + D047E4FE1E7D86AD0036F96B /* fdct.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4921E7D7F070036F96B /* fdct.cc */; }; + D047E5001E7D86AD0036F96B /* gamma_correct.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4941E7D7F070036F96B /* gamma_correct.cc */; }; + D047E5021E7D86AD0036F96B /* guetzli.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4961E7D7F070036F96B /* guetzli.cc */; }; + D047E5031E7D86AD0036F96B /* idct.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4971E7D7F070036F96B /* idct.cc */; }; + D047E5061E7D86AD0036F96B /* jpeg_data_decoder.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E49A1E7D7F070036F96B /* jpeg_data_decoder.cc */; }; + D047E5081E7D86AD0036F96B /* jpeg_data_encoder.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E49C1E7D7F070036F96B /* jpeg_data_encoder.cc */; }; + D047E50A1E7D86AD0036F96B /* jpeg_data_reader.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E49E1E7D7F070036F96B /* jpeg_data_reader.cc */; }; + D047E50C1E7D86AD0036F96B /* jpeg_data_writer.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4A01E7D7F070036F96B /* jpeg_data_writer.cc */; }; + D047E50E1E7D86AD0036F96B /* jpeg_data.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4A21E7D7F070036F96B /* jpeg_data.cc */; }; + D047E5111E7D86AD0036F96B /* jpeg_huffman_decode.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4A51E7D7F070036F96B /* jpeg_huffman_decode.cc */; }; + D047E5141E7D86AD0036F96B /* output_image.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4A91E7D7F070036F96B /* output_image.cc */; }; + D047E5161E7D86AD0036F96B /* preprocess_downsample.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4AB1E7D7F070036F96B /* preprocess_downsample.cc */; }; + D047E5181E7D86AD0036F96B /* processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4AD1E7D7F070036F96B /* processor.cc */; }; + D047E51A1E7D86AD0036F96B /* quality.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4AF1E7D7F070036F96B /* quality.cc */; }; + D047E51C1E7D86AD0036F96B /* quantize.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4B11E7D7F070036F96B /* quantize.cc */; }; + D047E51E1E7D86AD0036F96B /* score.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E4B31E7D7F070036F96B /* score.cc */; }; + D047E5231E7D87670036F96B /* liblibpng.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D047E5221E7D87670036F96B /* liblibpng.dylib */; }; + D047E5291E7D8A050036F96B /* butteraugli.cc in Sources */ = {isa = PBXBuildFile; fileRef = D047E5251E7D89D50036F96B /* butteraugli.cc */; }; + D047E52B1E7D8BFD0036F96B /* libimageoptimjpeg.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = D047E52A1E7D8BFD0036F96B /* libimageoptimjpeg.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 5AB6A9051E966617009BDBC3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5AB6A8FE1E966617009BDBC3 /* libpng.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = D2AAC0630554660B00DB518D; + remoteInfo = libpng; + }; + 5AB6A9071E966617009BDBC3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5AB6A8FE1E966617009BDBC3 /* libpng.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5AC2B4D613394EDA00376783; + remoteInfo = static; + }; + 5AB6A9091E96661C009BDBC3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5AB6A8FE1E966617009BDBC3 /* libpng.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = D2AAC0620554660B00DB518D; + remoteInfo = libpng; + }; + D047E4EF1E7D86970036F96B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D047E46A1E7D7DF00036F96B /* Project object */; + proxyType = 1; + remoteGlobalIDString = D047E4CE1E7D81720036F96B; + remoteInfo = download; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + D047E4E61E7D868D0036F96B /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 5A86E6131E8133B900C54C09 /* debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = ""; }; + 5A86E6141E8133B900C54C09 /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = ""; }; + 5AB6A8FE1E966617009BDBC3 /* libpng.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libpng.xcodeproj; path = ../libpng/libpng.xcodeproj; sourceTree = ""; }; + D047E4871E7D7F070036F96B /* butteraugli_comparator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = butteraugli_comparator.cc; path = guetzli/butteraugli_comparator.cc; sourceTree = ""; }; + D047E4881E7D7F070036F96B /* butteraugli_comparator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = butteraugli_comparator.h; path = guetzli/butteraugli_comparator.h; sourceTree = ""; }; + D047E4891E7D7F070036F96B /* color_transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = color_transform.h; path = guetzli/color_transform.h; sourceTree = ""; }; + D047E48A1E7D7F070036F96B /* comparator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = comparator.h; path = guetzli/comparator.h; sourceTree = ""; }; + D047E48B1E7D7F070036F96B /* dct_double.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dct_double.cc; path = guetzli/dct_double.cc; sourceTree = ""; }; + D047E48C1E7D7F070036F96B /* dct_double.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dct_double.h; path = guetzli/dct_double.h; sourceTree = ""; }; + D047E48D1E7D7F070036F96B /* debug_print.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = debug_print.cc; path = guetzli/debug_print.cc; sourceTree = ""; }; + D047E48E1E7D7F070036F96B /* debug_print.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = debug_print.h; path = guetzli/debug_print.h; sourceTree = ""; }; + D047E48F1E7D7F070036F96B /* entropy_encode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = entropy_encode.cc; path = guetzli/entropy_encode.cc; sourceTree = ""; }; + D047E4901E7D7F070036F96B /* entropy_encode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = entropy_encode.h; path = guetzli/entropy_encode.h; sourceTree = ""; }; + D047E4911E7D7F070036F96B /* fast_log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fast_log.h; path = guetzli/fast_log.h; sourceTree = ""; }; + D047E4921E7D7F070036F96B /* fdct.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fdct.cc; path = guetzli/fdct.cc; sourceTree = ""; }; + D047E4931E7D7F070036F96B /* fdct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fdct.h; path = guetzli/fdct.h; sourceTree = ""; }; + D047E4941E7D7F070036F96B /* gamma_correct.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = gamma_correct.cc; path = guetzli/gamma_correct.cc; sourceTree = ""; }; + D047E4951E7D7F070036F96B /* gamma_correct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gamma_correct.h; path = guetzli/gamma_correct.h; sourceTree = ""; }; + D047E4961E7D7F070036F96B /* guetzli.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = guetzli.cc; path = guetzli/guetzli.cc; sourceTree = ""; }; + D047E4971E7D7F070036F96B /* idct.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = idct.cc; path = guetzli/idct.cc; sourceTree = ""; }; + D047E4981E7D7F070036F96B /* idct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = idct.h; path = guetzli/idct.h; sourceTree = ""; }; + D047E4991E7D7F070036F96B /* jpeg_bit_writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_bit_writer.h; path = guetzli/jpeg_bit_writer.h; sourceTree = ""; }; + D047E49A1E7D7F070036F96B /* jpeg_data_decoder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg_data_decoder.cc; path = guetzli/jpeg_data_decoder.cc; sourceTree = ""; }; + D047E49B1E7D7F070036F96B /* jpeg_data_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_data_decoder.h; path = guetzli/jpeg_data_decoder.h; sourceTree = ""; }; + D047E49C1E7D7F070036F96B /* jpeg_data_encoder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg_data_encoder.cc; path = guetzli/jpeg_data_encoder.cc; sourceTree = ""; }; + D047E49D1E7D7F070036F96B /* jpeg_data_encoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_data_encoder.h; path = guetzli/jpeg_data_encoder.h; sourceTree = ""; }; + D047E49E1E7D7F070036F96B /* jpeg_data_reader.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg_data_reader.cc; path = guetzli/jpeg_data_reader.cc; sourceTree = ""; }; + D047E49F1E7D7F070036F96B /* jpeg_data_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_data_reader.h; path = guetzli/jpeg_data_reader.h; sourceTree = ""; }; + D047E4A01E7D7F070036F96B /* jpeg_data_writer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg_data_writer.cc; path = guetzli/jpeg_data_writer.cc; sourceTree = ""; }; + D047E4A11E7D7F070036F96B /* jpeg_data_writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_data_writer.h; path = guetzli/jpeg_data_writer.h; sourceTree = ""; }; + D047E4A21E7D7F070036F96B /* jpeg_data.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg_data.cc; path = guetzli/jpeg_data.cc; sourceTree = ""; }; + D047E4A31E7D7F070036F96B /* jpeg_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_data.h; path = guetzli/jpeg_data.h; sourceTree = ""; }; + D047E4A41E7D7F070036F96B /* jpeg_error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_error.h; path = guetzli/jpeg_error.h; sourceTree = ""; }; + D047E4A51E7D7F070036F96B /* jpeg_huffman_decode.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jpeg_huffman_decode.cc; path = guetzli/jpeg_huffman_decode.cc; sourceTree = ""; }; + D047E4A61E7D7F070036F96B /* jpeg_huffman_decode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jpeg_huffman_decode.h; path = guetzli/jpeg_huffman_decode.h; sourceTree = ""; }; + D047E4A81E7D7F070036F96B /* order.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; name = order.inc; path = guetzli/order.inc; sourceTree = ""; }; + D047E4A91E7D7F070036F96B /* output_image.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = output_image.cc; path = guetzli/output_image.cc; sourceTree = ""; }; + D047E4AA1E7D7F070036F96B /* output_image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = output_image.h; path = guetzli/output_image.h; sourceTree = ""; }; + D047E4AB1E7D7F070036F96B /* preprocess_downsample.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = preprocess_downsample.cc; path = guetzli/preprocess_downsample.cc; sourceTree = ""; }; + D047E4AC1E7D7F070036F96B /* preprocess_downsample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = preprocess_downsample.h; path = guetzli/preprocess_downsample.h; sourceTree = ""; }; + D047E4AD1E7D7F070036F96B /* processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = processor.cc; path = guetzli/processor.cc; sourceTree = ""; }; + D047E4AE1E7D7F070036F96B /* processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = processor.h; path = guetzli/processor.h; sourceTree = ""; }; + D047E4AF1E7D7F070036F96B /* quality.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quality.cc; path = guetzli/quality.cc; sourceTree = ""; }; + D047E4B01E7D7F070036F96B /* quality.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quality.h; path = guetzli/quality.h; sourceTree = ""; }; + D047E4B11E7D7F070036F96B /* quantize.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = quantize.cc; path = guetzli/quantize.cc; sourceTree = ""; }; + D047E4B21E7D7F070036F96B /* quantize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quantize.h; path = guetzli/quantize.h; sourceTree = ""; }; + D047E4B31E7D7F070036F96B /* score.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = score.cc; path = guetzli/score.cc; sourceTree = ""; }; + D047E4B41E7D7F070036F96B /* score.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = score.h; path = guetzli/score.h; sourceTree = ""; }; + D047E4B51E7D7F070036F96B /* stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stats.h; path = guetzli/stats.h; sourceTree = ""; }; + D047E4E81E7D868D0036F96B /* guetzli */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = guetzli; sourceTree = BUILT_PRODUCTS_DIR; }; + D047E5221E7D87670036F96B /* liblibpng.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = liblibpng.dylib; path = "../../../Library/Developer/Xcode/DerivedData/ImageOptim-cmhdqovjmikzhafpeansxwkmezkf/Build/Products/Debug/liblibpng.dylib"; sourceTree = ""; }; + D047E5241E7D89D50036F96B /* butteraugli_main.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = butteraugli_main.cc; path = guetzli/third_party/butteraugli/butteraugli/butteraugli_main.cc; sourceTree = ""; }; + D047E5251E7D89D50036F96B /* butteraugli.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = butteraugli.cc; path = guetzli/third_party/butteraugli/butteraugli/butteraugli.cc; sourceTree = ""; }; + D047E5261E7D89D50036F96B /* butteraugli.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = butteraugli.h; path = guetzli/third_party/butteraugli/butteraugli/butteraugli.h; sourceTree = ""; }; + D047E52A1E7D8BFD0036F96B /* libimageoptimjpeg.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libimageoptimjpeg.dylib; path = "../../../Library/Developer/Xcode/DerivedData/ImageOptim-cmhdqovjmikzhafpeansxwkmezkf/Build/Products/Debug/libimageoptimjpeg.dylib"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D047E4E51E7D868D0036F96B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D047E52B1E7D8BFD0036F96B /* libimageoptimjpeg.dylib in Frameworks */, + D047E5231E7D87670036F96B /* liblibpng.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 5AB6A8FF1E966617009BDBC3 /* Products */ = { + isa = PBXGroup; + children = ( + 5AB6A9061E966617009BDBC3 /* liblibpng.dylib */, + 5AB6A9081E966617009BDBC3 /* libstatic.a */, + ); + name = Products; + sourceTree = ""; + }; + D047E4691E7D7DF00036F96B = { + isa = PBXGroup; + children = ( + D047E5211E7D87670036F96B /* Frameworks */, + D047E4741E7D7DF00036F96B /* guetzli */, + D047E4731E7D7DF00036F96B /* Products */, + D047E5271E7D89F10036F96B /* third_party */, + 5A86E6131E8133B900C54C09 /* debug.xcconfig */, + 5AB6A8FE1E966617009BDBC3 /* libpng.xcodeproj */, + 5A86E6141E8133B900C54C09 /* release.xcconfig */, + ); + sourceTree = ""; + }; + D047E4731E7D7DF00036F96B /* Products */ = { + isa = PBXGroup; + children = ( + D047E4E81E7D868D0036F96B /* guetzli */, + ); + name = Products; + sourceTree = ""; + }; + D047E4741E7D7DF00036F96B /* guetzli */ = { + isa = PBXGroup; + children = ( + D047E4871E7D7F070036F96B /* butteraugli_comparator.cc */, + D047E4881E7D7F070036F96B /* butteraugli_comparator.h */, + D047E4891E7D7F070036F96B /* color_transform.h */, + D047E48A1E7D7F070036F96B /* comparator.h */, + D047E48B1E7D7F070036F96B /* dct_double.cc */, + D047E48C1E7D7F070036F96B /* dct_double.h */, + D047E48D1E7D7F070036F96B /* debug_print.cc */, + D047E48E1E7D7F070036F96B /* debug_print.h */, + D047E48F1E7D7F070036F96B /* entropy_encode.cc */, + D047E4901E7D7F070036F96B /* entropy_encode.h */, + D047E4911E7D7F070036F96B /* fast_log.h */, + D047E4921E7D7F070036F96B /* fdct.cc */, + D047E4931E7D7F070036F96B /* fdct.h */, + D047E4941E7D7F070036F96B /* gamma_correct.cc */, + D047E4951E7D7F070036F96B /* gamma_correct.h */, + D047E4961E7D7F070036F96B /* guetzli.cc */, + D047E4971E7D7F070036F96B /* idct.cc */, + D047E4981E7D7F070036F96B /* idct.h */, + D047E4991E7D7F070036F96B /* jpeg_bit_writer.h */, + D047E4A21E7D7F070036F96B /* jpeg_data.cc */, + D047E4A31E7D7F070036F96B /* jpeg_data.h */, + D047E49A1E7D7F070036F96B /* jpeg_data_decoder.cc */, + D047E49B1E7D7F070036F96B /* jpeg_data_decoder.h */, + D047E49C1E7D7F070036F96B /* jpeg_data_encoder.cc */, + D047E49D1E7D7F070036F96B /* jpeg_data_encoder.h */, + D047E49E1E7D7F070036F96B /* jpeg_data_reader.cc */, + D047E49F1E7D7F070036F96B /* jpeg_data_reader.h */, + D047E4A01E7D7F070036F96B /* jpeg_data_writer.cc */, + D047E4A11E7D7F070036F96B /* jpeg_data_writer.h */, + D047E4A41E7D7F070036F96B /* jpeg_error.h */, + D047E4A51E7D7F070036F96B /* jpeg_huffman_decode.cc */, + D047E4A61E7D7F070036F96B /* jpeg_huffman_decode.h */, + D047E4A81E7D7F070036F96B /* order.inc */, + D047E4A91E7D7F070036F96B /* output_image.cc */, + D047E4AA1E7D7F070036F96B /* output_image.h */, + D047E4AB1E7D7F070036F96B /* preprocess_downsample.cc */, + D047E4AC1E7D7F070036F96B /* preprocess_downsample.h */, + D047E4AD1E7D7F070036F96B /* processor.cc */, + D047E4AE1E7D7F070036F96B /* processor.h */, + D047E4AF1E7D7F070036F96B /* quality.cc */, + D047E4B01E7D7F070036F96B /* quality.h */, + D047E4B11E7D7F070036F96B /* quantize.cc */, + D047E4B21E7D7F070036F96B /* quantize.h */, + D047E4B31E7D7F070036F96B /* score.cc */, + D047E4B41E7D7F070036F96B /* score.h */, + D047E4B51E7D7F070036F96B /* stats.h */, + ); + path = guetzli; + sourceTree = ""; + }; + D047E5211E7D87670036F96B /* Frameworks */ = { + isa = PBXGroup; + children = ( + D047E52A1E7D8BFD0036F96B /* libimageoptimjpeg.dylib */, + D047E5221E7D87670036F96B /* liblibpng.dylib */, + ); + name = Frameworks; + sourceTree = ""; + }; + D047E5271E7D89F10036F96B /* third_party */ = { + isa = PBXGroup; + children = ( + D047E5251E7D89D50036F96B /* butteraugli.cc */, + D047E5261E7D89D50036F96B /* butteraugli.h */, + D047E5241E7D89D50036F96B /* butteraugli_main.cc */, + ); + name = third_party; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXLegacyTarget section */ + D047E4CE1E7D81720036F96B /* download */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "$(ACTION)"; + buildConfigurationList = D047E4CF1E7D81720036F96B /* Build configuration list for PBXLegacyTarget "download" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/make; + dependencies = ( + ); + name = download; + passBuildSettingsInEnvironment = 1; + productName = download; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + D047E4E71E7D868D0036F96B /* guetzli */ = { + isa = PBXNativeTarget; + buildConfigurationList = D047E4EC1E7D868D0036F96B /* Build configuration list for PBXNativeTarget "guetzli" */; + buildPhases = ( + D047E4E41E7D868D0036F96B /* Sources */, + D047E4E51E7D868D0036F96B /* Frameworks */, + D047E4E61E7D868D0036F96B /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 5AB6A90A1E96661C009BDBC3 /* PBXTargetDependency */, + D047E4F01E7D86970036F96B /* PBXTargetDependency */, + ); + name = guetzli; + productName = guetzli; + productReference = D047E4E81E7D868D0036F96B /* guetzli */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + D047E46A1E7D7DF00036F96B /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + }; + buildConfigurationList = D047E46D1E7D7DF00036F96B /* Build configuration list for PBXProject "guetzli" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + ); + mainGroup = D047E4691E7D7DF00036F96B; + productRefGroup = D047E4731E7D7DF00036F96B /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 5AB6A8FF1E966617009BDBC3 /* Products */; + ProjectRef = 5AB6A8FE1E966617009BDBC3 /* libpng.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + D047E4CE1E7D81720036F96B /* download */, + D047E4E71E7D868D0036F96B /* guetzli */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 5AB6A9061E966617009BDBC3 /* liblibpng.dylib */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.dylib"; + path = liblibpng.dylib; + remoteRef = 5AB6A9051E966617009BDBC3 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5AB6A9081E966617009BDBC3 /* libstatic.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libstatic.a; + remoteRef = 5AB6A9071E966617009BDBC3 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXSourcesBuildPhase section */ + D047E4E41E7D868D0036F96B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D047E5291E7D8A050036F96B /* butteraugli.cc in Sources */, + D047E4F31E7D86AD0036F96B /* butteraugli_comparator.cc in Sources */, + D047E4F71E7D86AD0036F96B /* dct_double.cc in Sources */, + D047E4F91E7D86AD0036F96B /* debug_print.cc in Sources */, + D047E4FB1E7D86AD0036F96B /* entropy_encode.cc in Sources */, + D047E4FE1E7D86AD0036F96B /* fdct.cc in Sources */, + D047E5001E7D86AD0036F96B /* gamma_correct.cc in Sources */, + D047E5021E7D86AD0036F96B /* guetzli.cc in Sources */, + D047E5031E7D86AD0036F96B /* idct.cc in Sources */, + D047E50E1E7D86AD0036F96B /* jpeg_data.cc in Sources */, + D047E5061E7D86AD0036F96B /* jpeg_data_decoder.cc in Sources */, + D047E5081E7D86AD0036F96B /* jpeg_data_encoder.cc in Sources */, + D047E50A1E7D86AD0036F96B /* jpeg_data_reader.cc in Sources */, + D047E50C1E7D86AD0036F96B /* jpeg_data_writer.cc in Sources */, + D047E5111E7D86AD0036F96B /* jpeg_huffman_decode.cc in Sources */, + D047E5141E7D86AD0036F96B /* output_image.cc in Sources */, + D047E5161E7D86AD0036F96B /* preprocess_downsample.cc in Sources */, + D047E5181E7D86AD0036F96B /* processor.cc in Sources */, + D047E51A1E7D86AD0036F96B /* quality.cc in Sources */, + D047E51C1E7D86AD0036F96B /* quantize.cc in Sources */, + D047E51E1E7D86AD0036F96B /* score.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 5AB6A90A1E96661C009BDBC3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = libpng; + targetProxy = 5AB6A9091E96661C009BDBC3 /* PBXContainerItemProxy */; + }; + D047E4F01E7D86970036F96B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = D047E4CE1E7D81720036F96B /* download */; + targetProxy = D047E4EF1E7D86970036F96B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + D047E4771E7D7DF00036F96B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A86E6131E8133B900C54C09 /* debug.xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LIBRARY = "libc++"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NDEBUG, + NS_BLOCK_ASSERTIONS, + HAVE_CONFIG_H, + PNG_CONFIGURE_LIBPNG, + ); + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/guetzli", + "$(SRCROOT)/guetzli/third_party/butteraugli", + "$(SRCROOT)/../libpng", + ); + }; + name = Debug; + }; + D047E4781E7D7DF00036F96B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A86E6141E8133B900C54C09 /* release.xcconfig */; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++14"; + CLANG_CXX_LIBRARY = "libc++"; + GCC_PREPROCESSOR_DEFINITIONS = ( + NDEBUG, + NS_BLOCK_ASSERTIONS, + HAVE_CONFIG_H, + PNG_CONFIGURE_LIBPNG, + ); + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/guetzli", + "$(SRCROOT)/guetzli/third_party/butteraugli", + "$(SRCROOT)/../libpng", + ); + }; + name = Release; + }; + D047E4D01E7D81720036F96B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + D047E4D11E7D81720036F96B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + D047E4ED1E7D868D0036F96B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + D047E4EE1E7D868D0036F96B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + D047E46D1E7D7DF00036F96B /* Build configuration list for PBXProject "guetzli" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D047E4771E7D7DF00036F96B /* Debug */, + D047E4781E7D7DF00036F96B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D047E4CF1E7D81720036F96B /* Build configuration list for PBXLegacyTarget "download" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D047E4D01E7D81720036F96B /* Debug */, + D047E4D11E7D81720036F96B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D047E4EC1E7D868D0036F96B /* Build configuration list for PBXNativeTarget "guetzli" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D047E4ED1E7D868D0036F96B /* Debug */, + D047E4EE1E7D868D0036F96B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = D047E46A1E7D7DF00036F96B /* Project object */; +} diff --git a/imageoptim/.tx/config b/imageoptim/.tx/config new file mode 100644 index 00000000..e9a9b447 --- /dev/null +++ b/imageoptim/.tx/config @@ -0,0 +1,32 @@ +[main] +host = https://www.transifex.com +lang_map = zh_TW:zh-Hant, en_GB:en-GB, pt_BR:pt-BR + +[imageoptim.localizablestrings] +file_filter = .lproj/Localizable.strings +source_lang = en_US + +[imageoptim.mainmenustrings] +file_filter = .lproj/MainMenu.strings +source_lang = en_US + +[imageoptim.prefsstrings] +file_filter = .lproj/PrefsController.strings +source_lang = en_US + +[imageoptim.helpindexhtml] +file_filter = .lproj/Help/index.html +source_lang = en_US + +[imageoptim.help-prefshtml] +file_filter = .lproj/Help/prefs.html +source_lang = en_US + +[imageoptim.creditshtml] +file_filter = .lproj/Credits.html +source_lang = en_US + +[imageoptim.credits] +file_filter = .lproj/Credits.html +source_lang = en_US + diff --git a/imageoptim/Backend/DirScanner.h b/imageoptim/Backend/DirScanner.h new file mode 100644 index 00000000..ce37f595 --- /dev/null +++ b/imageoptim/Backend/DirScanner.h @@ -0,0 +1,19 @@ +// +// +// Created by porneL on 30.wrz.07. +// + +@import Cocoa; + +@class FilesController; + +@interface DirScanner : NSOperation { + FilesController *filesController; + NSURL *path; + NSArray *extensions; +} + +- (instancetype)initWithPath:(NSURL *)path filesController:(FilesController *)q extensions:(NSArray *)e; + +@property (copy) NSURL *path; +@end diff --git a/imageoptim/Backend/DirScanner.m b/imageoptim/Backend/DirScanner.m new file mode 100644 index 00000000..4792a791 --- /dev/null +++ b/imageoptim/Backend/DirScanner.m @@ -0,0 +1,59 @@ +// +// DirScanner.m +// +// Created by porneL on 30.wrz.07. +// + +#import "DirScanner.h" +#import "../FilesController.h" +#import "../log.h" + +@implementation DirScanner + +@synthesize path; + +- (instancetype)initWithPath:(NSURL *)aPath filesController:(FilesController *)q extensions:(NSArray *)theExtensions { + if (self = [super init]) { + self.path = aPath; + filesController = q; + extensions = theExtensions; + } + return self; +} + +- (void)main { + const NSUInteger buffer_capacity = 256; + NSUInteger buffer_size = 16; + NSMutableArray *buffer = [NSMutableArray arrayWithCapacity:buffer_capacity]; + + @try { + for (NSURL *newPath in [[NSFileManager defaultManager] enumeratorAtURL:path + includingPropertiesForKeys:@[] + options:0 + errorHandler:nil]) { + if ([extensions containsObject:[newPath pathExtension]]) { + [buffer addObject:newPath]; + if ([buffer count] >= buffer_size) { + // assuming that previous buffer flushes created some work to do + // buffer size can be increased to lower overhead + buffer_size = MIN(buffer_capacity, buffer_size * 4); + [filesController addURLs:buffer filesOnly:YES]; + [buffer removeAllObjects]; + } + } + } + + if ([buffer count]) { + [filesController addURLs:buffer filesOnly:YES]; + } + } + @catch (NSException *ex) { + IOWarn("DIR worker failed %@", ex); + } +} + +- (NSString *)description { + return [NSString stringWithFormat:@"Dir %@ (%@)", path, [super description]]; +} + +@end diff --git a/imageoptim/Backend/File.h b/imageoptim/Backend/File.h new file mode 100644 index 00000000..11eaf353 --- /dev/null +++ b/imageoptim/Backend/File.h @@ -0,0 +1,45 @@ +// +// File.h +// ImageOptim +// +// Created by Kornel on 11/01/2017. +// +// + +#import + +@class TempFile; + +enum IOFileType { + FILETYPE_PNG = 1, + FILETYPE_JPEG, + FILETYPE_GIF, + FILETYPE_SVG, +}; + +NS_ASSUME_NONNULL_BEGIN +@interface File : NSObject { +@public + enum IOFileType fileType; +} + +- (nullable instancetype)initWithData:(NSData *)fileData fromPath:(NSURL *)path; + +// This is not copying, but only creates an instance poiting to the new place +// If size is given, it aviods disk accesss +- (nullable File *)copyOfPath:(NSURL *)path; +- (nullable File *)copyOfPath:(NSURL *)path size:(NSUInteger)s; +- (nullable TempFile *)tempCopyOfPath:(NSURL *)path; +- (nullable TempFile *)tempCopyOfPath:(NSURL *)path size:(NSUInteger)s; + +- (BOOL)isLarge; +- (BOOL)isSmall; + +@property (readonly) NSURL *path; +@property (readonly, assign) NSUInteger byteSize; +@property (readonly, nonatomic, nullable) NSString *mimeType; + ++ (NSInteger)byteSize:(NSURL *)afile; + +@end +NS_ASSUME_NONNULL_END diff --git a/imageoptim/Backend/File.m b/imageoptim/Backend/File.m new file mode 100644 index 00000000..7a7054aa --- /dev/null +++ b/imageoptim/Backend/File.m @@ -0,0 +1,116 @@ +// +// File.m +// ImageOptim +// +// Created by Kornel on 11/01/2017. +// +// + +#import "File.h" +#import "TempFile.h" +#import "../log.h" +#import + +@implementation File + +- (nullable instancetype)initWithType:(enum IOFileType)type size:(NSUInteger)size fromPath:(NSURL *)aPath { + if (!size) { + return nil; + } + + if ((self = [super init])) { + _path = aPath; + _byteSize = size; + fileType = type; + } + return self; +} + +-(instancetype)initWithData:(NSData *)fileData fromPath:(NSURL *)aPath { + const unsigned char pngheader[] = {0x89,0x50,0x4e,0x47,0x0d,0x0a}; + const unsigned char jpegheader[] = {0xff,0xd8,0xff}; + const unsigned char gifheader[] = {0x47,0x49,0x46,0x38}; + const unsigned char svgheader[] = {'<','s','v','g'}; + char fileHeaderBytes[6]; + + if (!fileData || fileData.length < sizeof(fileHeaderBytes)) { + return nil; + } + + [fileData getBytes:fileHeaderBytes length:sizeof(fileHeaderBytes)]; + + enum IOFileType type = 0; + + if (0 == memcmp(fileHeaderBytes, pngheader, sizeof(pngheader))) { + type = FILETYPE_PNG; + } else if (0 == memcmp(fileHeaderBytes, jpegheader, sizeof(jpegheader))) { + type = FILETYPE_JPEG; + } else if (0 == memcmp(fileHeaderBytes, gifheader, sizeof(gifheader))) { + type = FILETYPE_GIF; + } else if (0 == memcmp(fileHeaderBytes, svgheader, sizeof(svgheader)) || [aPath.pathExtension isEqualToString:@"svg"]) { + type = FILETYPE_SVG; + } + + return [self initWithType:type size:fileData.length fromPath:aPath]; +} + +- (nullable File *)copyOfPath:(NSURL *)path { + return [[File alloc] initWithType:fileType size:[File byteSize:path] fromPath:path]; +} + +- (nullable File *)copyOfPath:(NSURL *)path size:(NSUInteger)s { + return [[File alloc] initWithType:fileType size:s fromPath:path]; +} + +- (nullable TempFile *)tempCopyOfPath:(NSURL *)path { + return [[TempFile alloc] initWithType:fileType size:[File byteSize:path] fromPath:path]; +} + +- (nullable TempFile *)tempCopyOfPath:(NSURL *)path size:(NSUInteger)s { + if (!s) { + return nil; + } + + if (s != [File byteSize:path]) { + NSLog(@"Expected size %d, but file is actually %d", (int)s, (int)[File byteSize:path]); + return nil; + } + return [[TempFile alloc] initWithType:fileType size:s fromPath:path]; +} + +- (BOOL)isLarge { + if (fileType == FILETYPE_PNG) { + return _byteSize > 250 * 1024; + } + return _byteSize > 1 * 1024 * 1024; +} + +- (BOOL)isSmall { + if (fileType == FILETYPE_PNG) { + return _byteSize < 2048; + } + return _byteSize < 10 * 1024; +} + ++ (NSInteger)byteSize:(NSURL *)afile { + NSNumber *value = nil; + NSError *err = nil; + if ([afile getResourceValue:&value forKey:NSURLFileSizeKey error:&err] && value) { + return [value integerValue]; + } + IOWarn("Could not stat %@: %@", afile.path, err); + return 0; +} + +- (nullable NSString *)mimeType { + switch (fileType) { + case FILETYPE_PNG: return @"image/png"; + case FILETYPE_JPEG: return @"image/jpeg"; + case FILETYPE_GIF: return @"image/gif"; + case FILETYPE_SVG: return @"image/svg"; + default: + return nil; + } +} + +@end diff --git a/imageoptim/Backend/ImageOptimGPL.h b/imageoptim/Backend/ImageOptimGPL.h new file mode 100644 index 00000000..a55ae664 --- /dev/null +++ b/imageoptim/Backend/ImageOptimGPL.h @@ -0,0 +1,9 @@ +// +// Backend.h +// Backend +// +// Created by Kornel on 20/04/2015. +// +// + +@import Cocoa; diff --git a/imageoptim/Backend/Info.plist b/imageoptim/Backend/Info.plist new file mode 100644 index 00000000..c5c26c25 --- /dev/null +++ b/imageoptim/Backend/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleAllowMixedLocalizations + + NSHumanReadableCopyright + Free, Open Source (GNU GPL) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.8.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/imageoptim/Backend/Job.h b/imageoptim/Backend/Job.h new file mode 100644 index 00000000..026b9086 --- /dev/null +++ b/imageoptim/Backend/Job.h @@ -0,0 +1,76 @@ +// +// File.h +// +// Created by porneL on 8.wrz.07. +// + +@import Cocoa; +#import "Workers/Worker.h" + +@class ResultsDb, File, TempFile; + +NS_ASSUME_NONNULL_BEGIN +@interface Job : NSObject { + NSURL *filePath; + NSString *displayName; + + NSString *bestToolName; + NSMutableDictionary *bestTools; + + NSString *statusImageName; + NSString *statusText; + NSInteger statusOrder; + + NSMutableArray *workers; + NSMutableDictionary *workersPreviousResults; + + NSOperationQueue *fileIOQueue; + ResultsDb *db; + uint32_t settingsHash[4]; + uint32_t inputFileHash[4]; + + BOOL stopping, lossyConverted; +} + +- (BOOL)isBusy; +- (BOOL)isStoppable; +- (BOOL)isOptimized; + +- (BOOL)stop; +- (BOOL)revert; + +- (NSURL *)previewItemURL; +- (NSString *)previewItemTitle; + +@property (readonly) BOOL canRevert; +@property (readonly) BOOL isDone, isFailed; + +- (void)enqueueWorkersInCPUQueue:(NSOperationQueue *)queue fileIOQueue:(NSOperationQueue *)fileIOQueue serialQueue:(dispatch_queue_t)serialQueue defaults:(NSUserDefaults *)defaults; + +- (BOOL)setFileOptimized:(nullable TempFile *)f toolName:(NSString *)s; + +- (nullable instancetype)initWithFilePath:(NSURL *)aPath resultsDatabase:(nullable ResultsDb *)aDb; +- (void)updateStatusOfWorker:(nullable Worker *)currentWorker running:(BOOL)started; + +- (void)setFilePath:(NSURL *)s; + +@property (readonly, nullable) File *initialInput, *unoptimizedInput, *wipInput, *savedOutput, *revertFile; +@property (readonly, copy) NSString *fileName; + +@property (strong, nullable) NSString *statusText, *bestToolName; +@property (strong) NSString *displayName; +@property (strong, nonatomic) NSURL *filePath; +@property (strong) NSString *statusImageName; +@property (readonly, nonatomic) NSNumber *byteSizeOriginal; +@property (readonly, nonatomic) NSNumber *byteSizeOptimized; +@property (readonly, nonatomic) NSNumber *percentOptimized; +@property (assign, readonly) NSInteger statusOrder; +@property (strong, readonly) NSMutableDictionary *workersPreviousResults; + +- (void)setStatus:(NSString *)name order:(NSInteger)order text:(NSString *)text; +- (void)setError:(NSString *)text; +- (void)cleanup; + +- (void)doEnqueueWorkersInCPUQueue:(NSOperationQueue *)queue serialQueue:(dispatch_queue_t)serialQueue defaults:(NSUserDefaults *)defaults; +@end +NS_ASSUME_NONNULL_END diff --git a/imageoptim/Backend/Job.m b/imageoptim/Backend/Job.m new file mode 100644 index 00000000..88ac8aaa --- /dev/null +++ b/imageoptim/Backend/Job.m @@ -0,0 +1,837 @@ +// +// Created by porneL on 8.wrz.07. +// + +#import "Job.h" +#import "TempFile.h" +#import "ImageOptimController.h" +#import "Workers/Save.h" +#import "Workers/AdvCompWorker.h" +#import "Workers/PngquantWorker.h" +#import "Workers/PngoutWorker.h" +#import "Workers/OxiPngWorker.h" +#import "Workers/PngCrushWorker.h" +#import "Workers/ZopfliWorker.h" +#import "Workers/JpegoptimWorker.h" +#import "Workers/JpegtranWorker.h" +#import "Workers/GifsicleWorker.h" +#import "Workers/SvgoWorker.h" +#import "Workers/SvgcleanerWorker.h" +#import "Workers/GuetzliWorker.h" +#import +#import "log.h" +#include "ResultsDb.h" +#include + +@interface ToolStats : NSObject { +@public + NSString *name; + NSUInteger fileSize; + double ratio; +} +@end + +@implementation ToolStats +- (instancetype)initWithName:(NSString *)aName oldSize:(NSUInteger)oldSize newSize:(NSUInteger)size { + if ((self = [super init])) { + name = aName; + fileSize = size; + ratio = (double)oldSize / (double)size; + } + return self; +} +@end + +@interface Job () +@property (assign) BOOL isDone; +@property (assign) BOOL isFailed; +@property (readwrite, nullable) File *initialInput, *unoptimizedInput, *wipInput, *savedOutput, *revertFile; +@end + +@implementation Job { + BOOL preservePermissions; + BOOL preserveDates; +} + +@synthesize workersPreviousResults, filePath, displayName, statusText, statusOrder, statusImageName, bestToolName, isFailed, isDone; + +- (instancetype)initWithFilePath:(nonnull NSURL *)aPath resultsDatabase:(nullable ResultsDb *)aDb { + if (self = [self init]) { + workersPreviousResults = [NSMutableDictionary new]; + bestTools = [NSMutableDictionary new]; + filePath = aPath; + db = aDb; + self.displayName = [[NSFileManager defaultManager] displayNameAtPath:filePath.path]; + [self setStatus:@"wait" order:0 text:NSLocalizedString(@"Waiting to be optimized", @"tooltip")]; + } + return self; +} + +- (nonnull NSString *)fileName { + if (displayName) return displayName; + return [filePath lastPathComponent]; +} + +- (nullable File *)optimizedFileWithFallback:(BOOL)fallback { + File *optimizedFile = self.wipInput; + if (optimizedFile) { + return optimizedFile; + } + optimizedFile = self.savedOutput; + if (optimizedFile) { + return optimizedFile; + } + if (fallback) { + return self.unoptimizedInput; + } else { + return nil; + } +} + +- (NSNumber *)percentOptimized { + File *optimizedFile = self.wipInput; + if (optimizedFile == self.unoptimizedInput && !self.savedOutput) { + return nil; // early work in progress, don't display anything + } + + optimizedFile = [self optimizedFileWithFallback:false]; + if (!optimizedFile && self.isDone && !self.isFailed) { + return [NSNumber numberWithInteger:0]; + } + + NSUInteger byteSizeOptimized = [self optimizedFileWithFallback:false].byteSize; + NSUInteger byteSizeOriginal = self.initialInput.byteSize; + + if (!byteSizeOptimized) { + return nil; + } + double p = 100.0 - 100.0 * (double)byteSizeOptimized / (double)byteSizeOriginal; + if (p < 0) return [NSNumber numberWithInteger:0]; + return [NSNumber numberWithDouble:p]; +} + +- (BOOL)isOptimized { + File *unoptimizedInput = self.unoptimizedInput; + File *optimizedFile = [self optimizedFileWithFallback:false]; + + if (!optimizedFile || unoptimizedInput == optimizedFile) { + return NO; + } + + return optimizedFile.byteSize < unoptimizedInput.byteSize; +} + +- (NSNumber *)byteSizeOptimized { + File *input = [self optimizedFileWithFallback:true]; + + return [NSNumber numberWithUnsignedInteger:input.byteSize]; +} + +- (NSNumber *)byteSizeOriginal { + File *input = self.initialInput; + if (!input) { + return nil; + } + return [NSNumber numberWithUnsignedInteger:input.byteSize]; +} + +- (void)updateBestToolName:(ToolStats *)newTool { + bestTools[newTool->name] = newTool; + + NSString *smallestFileToolName = nil; + NSUInteger smallestFile = self.unoptimizedInput.byteSize; + NSString *bestRatioToolName = nil; float bestRatio = 0; + for (NSString *name in bestTools) { + ToolStats *t = bestTools[name]; + if (t->ratio > bestRatio) {bestRatioToolName = name; bestRatio = t->ratio;} + if (t->fileSize < smallestFile) {smallestFileToolName = name; smallestFile = t->fileSize;} + } + NSString *newBestToolName; + if (smallestFileToolName && bestRatioToolName && ![bestRatioToolName isEqualToString:smallestFileToolName]) { + newBestToolName = [NSString stringWithFormat:NSLocalizedString(@"%@+%@", "toolname+toolname in Best Tool column"), bestRatioToolName, smallestFileToolName]; + } else { + newBestToolName = smallestFileToolName ? smallestFileToolName : bestRatioToolName; + } + if (![newBestToolName isEqualToString:self.bestToolName]) { + self.bestToolName = newBestToolName; + } +} + +- (void)setNewFileInitial:(nullable File *)initial { + @synchronized(self) { + [self willChangeValueForKey:@"byteSizeOriginal"]; + self.initialInput = initial; + self.unoptimizedInput = initial; + self.revertFile = nil; + self.savedOutput = nil; + self.bestToolName = nil; + [self didChangeValueForKey:@"byteSizeOriginal"]; + lossyConverted = NO; + [bestTools removeAllObjects]; + } + [self setFileOptimized:initial]; +} + +- (void)setFileOptimized:(nullable File *)newFile { + [self willChangeValueForKey:@"byteSizeOptimized"]; + [self willChangeValueForKey:@"percentOptimized"]; + self.wipInput = newFile; + [self didChangeValueForKey:@"percentOptimized"]; + [self didChangeValueForKey:@"byteSizeOptimized"]; +} + +- (BOOL)setFileOptimized:(TempFile *)newFile toolName:(NSString *)toolname { + if (!newFile) { + return NO; + } + + NSUInteger newSize = newFile.byteSize; + BOOL changed = NO; + @synchronized(self) { + File *oldFile = self.wipInput; + NSUInteger oldSize = oldFile.byteSize; + + BOOL isSmaller = newSize && newSize < oldSize; + IODebug("%@ %@ file %@ from %lu to %lu in %@", + toolname, + isSmaller ? @"optimized" : @"did not optimize", + _unoptimizedInput.path.path, + (unsigned long)oldSize, (unsigned long)newSize, + newFile.path.path); + if (isSmaller) { + [self setFileOptimized:newFile]; + [self performSelectorOnMainThread:@selector(updateBestToolName:) withObject:[[ToolStats alloc] initWithName:toolname oldSize:oldSize newSize:newSize] waitUntilDone:NO]; + changed = YES; + } + } + return changed; +} + +-(BOOL)removeExtendedAttrAtURL:(NSURL *)path +{ + NSDictionary *extAttrToRemove = @{ @"com.apple.FinderInfo" : @1, + @"com.apple.ResourceFork": @1, + @"com.apple.quarantine" : @1, + @"com.apple.metadata:kMDItemWhereFroms": @1, + }; + + const char *fileSystemPath = [path.path fileSystemRepresentation]; + + // call with NULL for the char *namebuf param first + // in this case the method returns the size of the attributes buffer + ssize_t size = listxattr(fileSystemPath, NULL, 0, 0); + + if (size <= 0) { + return YES; // no attributes to remove + } + + char nameBuf[size]; + memset(nameBuf, 0, size); + + size = listxattr(fileSystemPath, nameBuf, size, 0); + if (size <= 0) { + return NO; // failed to read promised attrs + } + + int i = 0; + while (i < size) { + char *utf8name = &nameBuf[i]; + i += strlen(utf8name) + 1; // attrs are 0-terminated one after another + + NSString *name = @(utf8name); + if (extAttrToRemove[name]) { + if (removexattr(fileSystemPath, utf8name, 0) == 0) { + IODebug("Removed %s from %@", utf8name, path.path); + } else { + IOWarn("Can't remove %s from %@", utf8name, path.path); + return NO; + } + } + } + + return YES; +} + +- (BOOL)trashFileAtURL:(NSURL *)path resultingItemURL:(NSURL **)returning error:(NSError **)err { + NSFileManager *fm = [NSFileManager defaultManager]; + if (returning) *returning = nil; + + if ([fm trashItemAtURL:path resultingItemURL:returning error:err]) { + return YES; + } + IOWarn("Recovering trashing error %@", *err); // may fail on network drives + sleep(1); // network drives lag? + + if (![fm fileExistsAtPath:path.path]) { + // the file got deleted anyway? + return YES; + } + + NSURL *trashedPath = [[[NSURL fileURLWithPath:NSHomeDirectory() isDirectory:YES] URLByAppendingPathComponent:@".Trash"] URLByAppendingPathComponent:[path lastPathComponent]]; + [fm removeItemAtURL:trashedPath error:nil]; + + if ([fm moveItemAtURL:path toURL:trashedPath error:err]) { + if (returning) *returning = trashedPath; + return YES; + } + return NO; +} + +- (BOOL)canRevert { + return self.revertFile && self.isDone && !stopping; +} + +- (BOOL)revert { + if (![self canRevert]) { + return NO; + } + [self cleanup]; + + File *revertFile = self.revertFile; + + NSUInteger byteSizeOriginal = revertFile.byteSize; + if (byteSizeOriginal != [File byteSize:revertFile.path]) { + IOWarn(@"Revert path '%@' has wrong size, %ld expected", revertFile.path, (long)byteSizeOriginal); + return NO; + } + + NSFileManager *fm = [NSFileManager defaultManager]; + NSError *err = nil; + NSURL *newFilePath = nil; + if (![fm replaceItemAtURL:filePath withItemAtURL:revertFile.path backupItemName:nil options:NSFileManagerItemReplacementUsingNewMetadataOnly resultingItemURL:&newFilePath error:&err]) { + IOWarn(@"Can't revert: %@ due to %@", revertFile.path, err); + return NO; + } + + if (newFilePath) { + filePath = [newFilePath copy]; + } + [filePath removeAllCachedResourceValues]; + [self setNewFileInitial:[self.revertFile copyOfPath:filePath]]; + [self setStatus:@"noopt" order:6 text:NSLocalizedString(@"Reverted to original", @"tooltip")]; + return YES; +} + +- (BOOL)saveResult { + File *fileToSave = self.wipInput; + @try { + NSFileManager *fm = [NSFileManager defaultManager]; + + NSError *error = nil; + NSURL *moveFromPath = fileToSave.path; + NSURL *enclosingDir = [filePath URLByDeletingLastPathComponent]; + + // Dropbox is super buggy and actually loses files when they're moved/trashed quickly + BOOL isDropboxFolder = [fm fileExistsAtPath:[enclosingDir URLByAppendingPathComponent:@".dropbox"].path] || [filePath.path containsString: @"/Dropbox/"]; + IOWarn("Detected path %@ is inside Dropbox. Will try to avoid Dropbox's bugs.", filePath); + + if (![fm isWritableFileAtPath:enclosingDir.path]) { + IOWarn("The file %@ is in non-writeable directory %@", filePath.path, enclosingDir.path); + return NO; + } + + if (!isDropboxFolder && preservePermissions) { + NSString *writeToFilename = [[NSString stringWithFormat:@".%@~imageoptim", [filePath.lastPathComponent stringByDeletingPathExtension]] stringByAppendingPathExtension:filePath.pathExtension]; + NSURL *writeToURL = [enclosingDir URLByAppendingPathComponent:writeToFilename]; + NSString *writeToPath = writeToURL.path; + + if ([fm fileExistsAtPath:writeToPath]) { + if ([self trashFileAtURL:writeToURL resultingItemURL:nil error:&error]) { + } else { + IOWarn("%@", error); + error = nil; + if (![fm removeItemAtURL:writeToURL error:&error]) { + IOWarn("%@", error); + return NO; + } + } + } + + // move destination to temporary location that will be overwritten + if (![fm moveItemAtURL:filePath toURL:writeToURL error:&error]) { + IOWarn("Can't move to %@ %@", writeToPath, error); + return NO; + } + + // copy original data for trashing under original file name + if (![fm copyItemAtURL:writeToURL toURL:filePath error:&error]) { + IOWarn("Can't write to %@ %@", filePath.path, error); + return NO; + } + + NSData *data = [NSData dataWithContentsOfURL:fileToSave.path]; + if (!data) { + IOWarn("Unable to read %@", fileToSave.path); + return NO; + } + + if ([data length] != fileToSave.byteSize) { + IOWarn("Temp file size %u does not match expected %u in %@ for %@", (unsigned int)[data length], (unsigned int)fileToSave.byteSize, fileToSave.path, filePath.path); + return NO; + } + + if ([data length] < 30) { + IOWarn("File %@ is suspiciously small, could be truncated", fileToSave.path); + return NO; + } + + // overwrite old file that is under temporary name (so only content is replaced, not file metadata) + NSFileHandle *writehandle = [NSFileHandle fileHandleForWritingToURL:writeToURL error:nil]; + if (!writehandle) { + IOWarn("Unable to open %@ for writing. Check file permissions.", filePath.path); + return NO; + } + + [writehandle writeData:data]; // this throws on failure + [writehandle truncateFileAtOffset:[data length]]; + [writehandle closeFile]; + + moveFromPath = writeToURL; + } + + if (preserveDates) { + NSDictionary *originalAttributes = [fm attributesOfItemAtPath:filePath.path error:&error]; + if (error != NULL) { + IOWarn("Can't get attributes for %@ %@", filePath.path, error); + return NO; + } + + NSDictionary *attributesToTransfer = [NSDictionary dictionaryWithObjectsAndKeys:[originalAttributes fileCreationDate], NSFileCreationDate, [originalAttributes fileModificationDate], NSFileModificationDate, NULL]; + [fm setAttributes:attributesToTransfer ofItemAtPath:moveFromPath.path error:&error]; + if (error != NULL) { + IOWarn("Could not set creation and modification date for %@ %@", filePath.path, error); + return NO; + } + } + + NSURL *revertPathTmp; + if (!isDropboxFolder && [self trashFileAtURL:filePath resultingItemURL:&revertPathTmp error:&error]) { + if (!self.revertFile) { + File *previous = self.unoptimizedInput; + self.revertFile = [previous copyOfPath:revertPathTmp size:previous.byteSize]; + } + } else { + IOWarn("Can't trash %@ %@", filePath.path, error); + NSString *backupFileName = [[[filePath lastPathComponent] stringByAppendingString:@"~bak"] stringByAppendingPathExtension:[filePath pathExtension]]; + NSURL *backupPath = [enclosingDir URLByAppendingPathComponent:backupFileName]; + + BOOL moved = [fm moveItemAtURL:filePath toURL:backupPath error:&error]; + if (!moved) { + [fm removeItemAtURL:backupPath error:nil]; + moved = [fm moveItemAtURL:filePath toURL:backupPath error:&error]; + } + + if (moved) { + if (isDropboxFolder) { + sleep(1); // give the buggy thing time to sync + } + NSURL *trashedPath = nil; + if ([fm trashItemAtURL:backupPath resultingItemURL:&trashedPath error:nil]) { + backupPath = trashedPath; + } + + if (!self.revertFile && backupPath) { + self.revertFile = [self.unoptimizedInput copyOfPath:backupPath]; + } + } else { + IOWarn("Can't move to %@ %@", backupPath, error); + return NO; + } + } + + if (![fm moveItemAtURL:moveFromPath toURL:filePath error:&error]) { + IOWarn("Failed to move from %@ to %@; %@", moveFromPath.path, filePath.path, error); + return NO; + } + + [filePath removeAllCachedResourceValues]; + self.savedOutput = [fileToSave copyOfPath:filePath size:fileToSave.byteSize]; + [self setFileOptimized:nil]; + if (isDropboxFolder) { + sleep(1); // give the buggy thing time to sync + } + [self removeExtendedAttrAtURL:filePath]; + } + @catch (NSException *e) { + IOWarn("Exception thrown %@ while saving %@", e, filePath.path); + return NO; + } + + return YES; +} + +- (void)setNooptStatus { + [self setFileOptimized:nil]; // Needed to update 0% optimized display + [self setStatus:@"noopt" order:5 text:NSLocalizedString(@"File cannot be optimized any further", @"tooltip")]; + self.isDone = YES; + [self stopAllWorkers]; +} + +- (void)saveResultAndUpdateStatus { + assert([self isBusy]); + if ([self isOptimized]) { + BOOL saved = [self saveResult]; + self.isDone = YES; + [self stopAllWorkers]; + if (saved) { + [self setStatus:@"ok" order:7 text:[NSString stringWithFormat:NSLocalizedString(@"Optimized successfully with %@", @"tooltip"), bestToolName]]; + } else { + [self setError:NSLocalizedString(@"Optimized file could not be saved", @"tooltip")]; + } + } else { + [self setNooptStatus]; + if (!stopping && !self.isFailed) { + [db setUnoptimizableFileHash:inputFileHash size:self.unoptimizedInput.byteSize]; + } + } +} + +- (void)enqueueWorkersInCPUQueue:(nonnull NSOperationQueue *)queue fileIOQueue:(nonnull NSOperationQueue *)aFileIOQueue serialQueue:(dispatch_queue_t)serialQueue defaults:(nonnull NSUserDefaults *)defaults { + [self willChangeValueForKey:@"isBusy"]; + NSOperation *actualEnqueue = [NSBlockOperation blockOperationWithBlock:^{ + @synchronized(self) { + [self doEnqueueWorkersInCPUQueue:queue serialQueue:serialQueue defaults:defaults]; + } + }]; + @synchronized(self) { + self.isDone = NO; + self.isFailed = NO; + stopping = NO; + fileIOQueue = aFileIOQueue; // will be used for saving + workers = [[NSMutableArray alloc] initWithCapacity:10]; + preservePermissions = [defaults boolForKey:@"PreservePermissions"]; + preserveDates = [defaults boolForKey:@"PreserveDates"]; + + BOOL isQueueUnderUtilized = queue.operationCount < queue.maxConcurrentOperationCount; + if (isQueueUnderUtilized) { + actualEnqueue.queuePriority = NSOperationQueuePriorityVeryHigh; + } + + [workers addObject:actualEnqueue]; + [fileIOQueue addOperation:actualEnqueue]; + } + [self didChangeValueForKey:@"isBusy"]; +} +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +- (void)setSettingsHash:(NSArray *)allWorkers { + CC_MD5_CTX md5ctx = {}; + CC_MD5_Init(&md5ctx); + CC_MD5_Update(&md5ctx, "3", 1); // to update when programs change + for (Worker *w in allWorkers) { + NSInteger tmp = [w settingsIdentifier]; + CC_MD5_Update(&md5ctx, &tmp, sizeof(tmp)); + } + CC_MD5_Final((unsigned char *)settingsHash, &md5ctx); +} +#pragma GCC diagnostic pop + +- (void)doEnqueueWorkersInCPUQueue:(nonnull NSOperationQueue *)queue serialQueue:(dispatch_queue_t)serialQueue defaults:(nonnull NSUserDefaults *)defs { + [self setStatus:@"progress" order:3 text:NSLocalizedString(@"Inspecting file", @"tooltip")]; + + NSError *err = nil; + NSData *fileData = [NSData dataWithContentsOfURL:filePath options:NSDataReadingMappedIfSafe error:&err]; + NSUInteger length = [fileData length]; + + File *input = [[File alloc] initWithData:fileData fromPath:filePath]; + + if (!input || !length) { + IOWarn(@"Can't open the file %@ %@", filePath.path, err); + [self setNewFileInitial:nil]; + [self setError:NSLocalizedString(@"Can't open the file", @"tooltip, generic loading error")]; + return; + } + + BOOL hasChangedSinceLastSave = self.savedOutput && self.savedOutput.byteSize != input.byteSize; + BOOL hasBeenRunBefore = self.initialInput && !hasChangedSinceLastSave; + + // if file hasn't changed since last optimization, keep previous byteSizeOriginal, etc. + if (!hasBeenRunBefore || hasChangedSinceLastSave) { + [self setNewFileInitial:input]; + } else { + self.unoptimizedInput = input; + [self setFileOptimized:input]; + } + + NSFileManager *fm = [NSFileManager defaultManager]; + if (![fm isWritableFileAtPath:filePath.path]) { + [self setError:NSLocalizedString(@"Optimized file could not be saved", @"tooltip")]; + return; + } + + NSMutableArray *runFirst = [NSMutableArray new]; + NSMutableArray *runLater = [NSMutableArray new]; + + NSMutableArray *worker_list = [NSMutableArray new]; + NSInteger level = [defs integerForKey:@"AdvPngLevel"]; // AdvPNG setting is reused for all tools now + BOOL lossyEnabled = [defs boolForKey:@"LossyEnabled"]; + if (lossyEnabled) { + dispatch_async(dispatch_get_main_queue(), ^() { + [defs setBool:YES forKey:@"LossyUsed"]; + }); + } + + switch (input->fileType) { + case FILETYPE_PNG: + if (hasBeenRunBefore) { + level++; + } + + if (lossyEnabled) { + NSInteger pngQuality = [defs integerForKey:@"PngMinQuality"]; + if (!lossyConverted && pngQuality < 100 && pngQuality > 30) { + Worker *w = [[PngquantWorker alloc] initWithLevel:level minQuality:pngQuality file:self]; + [runFirst addObject:w]; + lossyConverted = YES; + } + } + + BOOL pngcrushEnabled = [defs boolForKey:@"PngCrush2Enabled"]; + BOOL oxipngEnabled = [defs boolForKey:@"OptiPngEnabled"]; + BOOL pngoutEnabled = [defs boolForKey:@"PngOutEnabled"]; + BOOL zopfliEnabled = [defs boolForKey:@"ZopfliEnabled"]; + BOOL advpngEnabled = [defs boolForKey:@"AdvPngEnabled"]; + BOOL removePNGChunks = [defs boolForKey:@"PngOutRemoveChunks"]; + + if (level < 4 && zopfliEnabled) { + pngoutEnabled = NO; + } + + if (level < 2 && oxipngEnabled) { + pngcrushEnabled = NO; + } + + if (pngcrushEnabled) [worker_list addObject:[[PngCrushWorker alloc] initWithLevel:level defaults:defs file:self]]; + if (oxipngEnabled) [worker_list addObject:[[OxiPngWorker alloc] initWithLevel:level stripMetadata:removePNGChunks file:self]]; + if (pngoutEnabled) [worker_list addObject:[[PngoutWorker alloc] initWithLevel:level defaults:defs file:self]]; + if (advpngEnabled && removePNGChunks) { + [worker_list addObject:[[AdvCompWorker alloc] initWithLevel:level file:self]]; + } + if (zopfliEnabled) { + ZopfliWorker *zw = [[ZopfliWorker alloc] initWithLevel:level defaults:defs file:self]; + zw.alternativeStrategy = hasBeenRunBefore; + [worker_list addObject:zw]; + } + break; + case FILETYPE_JPEG: + if (!lossyConverted && !hasBeenRunBefore && [defs boolForKey:@"GuetzliEnabled"] && [defs integerForKey:@"JpegOptimMaxQuality"] >= 80) { + [worker_list addObject:[[GuetzliWorker alloc] initWithDefaults:defs serialQueue:serialQueue file:self]]; + lossyConverted = YES; + } + if ([defs boolForKey:@"JpegOptimEnabled"]) [worker_list addObject:[[JpegoptimWorker alloc] initWithDefaults:defs file:self]]; + if ([defs boolForKey:@"JpegTranEnabled"]) [worker_list addObject:[[JpegtranWorker alloc] initWithDefaults:defs file:self]]; + break; + case FILETYPE_GIF: + if ([defs boolForKey:@"GifsicleEnabled"]) { + NSInteger gifQuality = [defs integerForKey:@"GifQuality"]; + if (lossyEnabled && !lossyConverted && gifQuality < 100 && gifQuality > 30) { + Worker *w = [[GifsicleWorker alloc] initWithInterlace:NO quality:gifQuality file:self]; + [runFirst addObject:w]; + lossyConverted = YES; + } else { + [worker_list addObject:[[GifsicleWorker alloc] initWithInterlace:NO quality:100 file:self]]; + if (level > 1) { + [worker_list addObject:[[GifsicleWorker alloc] initWithInterlace:YES quality:100 file:self]]; + } + } + } + break; + case FILETYPE_SVG: + if ([defs boolForKey:@"SvgoEnabled"]) { + [worker_list addObject:[[SvgoWorker alloc] initWithLossy:lossyEnabled job:self]]; + } + if ([defs boolForKey:@"SvgcleanerEnabled"]) { + [worker_list addObject:[[SvgcleanerWorker alloc] initWithLossy:lossyEnabled job:self]]; + } + break; + default: + [self setError:NSLocalizedString(@"File is neither PNG, GIF nor JPEG", @"tooltip")]; + [self cleanup]; + return; + } + + BOOL isQueueUnderUtilized = queue.operationCount < queue.maxConcurrentOperationCount; + + for (Worker *w in worker_list) { + // generally optimizers that have side effects should always be run first, one at a time + // unfortunately that makes whole process single-core serial when there are very few files + // so for small queues rely on nextOperation to give some order when possible + if ([w makesNonOptimizingModifications]) { + if (!isQueueUnderUtilized || [input isSmall]) { + [runFirst addObject:w]; + } else { + [w setQueuePriority:[runLater count] ? NSOperationQueuePriorityHigh : NSOperationQueuePriorityVeryHigh]; + [runLater addObject:w]; + } + } else { + [runLater addObject:w]; + } + } + + // Create a hash that includes all optimization settings to invalidate file caches on settings changes + [self setSettingsHash:[runFirst arrayByAddingObjectsFromArray:runLater]]; + + // Can't check only file size, because then hash won't be available on save! if ([db hasResultWithFileSize:byteSizeOnDisk]) { +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + CC_MD5_CTX md5ctx = {}, *md5ctxp = &md5ctx; + CC_MD5_Init(md5ctxp); + CC_MD5_Update(md5ctxp, settingsHash, 16); + CC_MD5_Update(md5ctxp, [fileData bytes], (CC_LONG)[fileData length]); + CC_MD5_Final((unsigned char *)inputFileHash, md5ctxp); + if ([db getResultWithHash:inputFileHash]) { // FIXME: check for lossy + NSLog(@"Skipping %@, because it has been optimized before", filePath.path); + [self setNooptStatus]; + return; + } +#pragma GCC diagnostic pop + NSOperation *saveOp = [[Save alloc] initWithTarget:self selector:@selector(saveResultAndUpdateStatus) object:nil]; + + Worker *previousWorker = nil; + for (Worker *w in runFirst) { + if (previousWorker) { + [w addDependency:previousWorker]; + previousWorker.nextOperation = w; + } else if ([input isSmall]) { + [w setQueuePriority:NSOperationQueuePriorityVeryLow]; + } else if (![input isLarge]) { + [w setQueuePriority:NSOperationQueuePriorityLow]; + } + [saveOp addDependency:w]; + [queue addOperation:w]; + previousWorker = w; + } + + Worker *runFirstDependency = previousWorker; + for (Worker *w in runLater) { + if (runFirstDependency) { + [w addDependency:runFirstDependency]; + } + if (previousWorker) { + previousWorker.nextOperation = w; + } + [saveOp addDependency:w]; + [queue addOperation:w]; + previousWorker = w; + } + + [self willChangeValueForKey:@"isBusy"]; + [workers addObjectsFromArray:runFirst]; + [workers addObjectsFromArray:runLater]; + [self didChangeValueForKey:@"isBusy"]; + + if (![workers count]) { + self.isDone = YES; + [self setError:NSLocalizedString(@"All neccessary tools have been disabled in Preferences", @"tooltip")]; + [self cleanup]; + } else { + [self updateStatusOfWorker:nil running:NO]; + [workers addObject:saveOp]; + [fileIOQueue addOperation:saveOp]; + } +} + +- (void)stopAllWorkers { + @synchronized(self) { + [self willChangeValueForKey:@"isBusy"]; + [workers makeObjectsPerformSelector:@selector(cancel)]; + [workers removeAllObjects]; + [self didChangeValueForKey:@"isBusy"]; + stopping = NO; + } +} + +- (void)cleanup { + [self stopAllWorkers]; + [self setFileOptimized:nil]; +} + +- (BOOL)isBusy { + return [workers count] > 0; +} + +- (BOOL)stop { + if (![self isStoppable]) { + return NO; + } + @synchronized(self) { + if (!self.isDone) { + stopping = YES; + [self willChangeValueForKey:@"isBusy"]; + for (Worker *w in workers) { + if (![w isKindOfClass:[Save class]]) { + [w cancel]; + } + } + [self didChangeValueForKey:@"isBusy"]; + } + } + return YES; +} + +- (BOOL)isStoppable { + return stopping || (!self.isDone && [self isBusy]); +} + +- (void)updateStatusOfWorker:(nullable Worker *)currentWorker running:(BOOL)started { + NSOperation *running = nil; + + [self willChangeValueForKey:@"isBusy"]; + @synchronized(self) { + if (currentWorker && started) { + running = currentWorker; + } else { + // technically I should pause all queues before that loop, but I'm going to allow some false "wait" icons instead + for (NSOperation *op in workers) { + // worker sets started:NO when it's ending, but isExecuting still shows true for it + // Worker class is limited to user-visible workers (there are other for enqueuing, saving, etc.) + if (op != currentWorker && [op isExecuting] && [op isKindOfClass:[Worker class]]) { + running = op; + break; + } + } + } + } + [self didChangeValueForKey:@"isBusy"]; + + if (running) { + NSString *name = [[running className] stringByReplacingOccurrencesOfString:@"Worker" withString:@""]; + [self setStatus:@"progress" order:4 text:[NSString stringWithFormat:NSLocalizedString(@"Started %@", @"command name, tooltip"), name]]; + } else { + [self setStatus:@"wait" order:1 text:NSLocalizedString(@"Waiting to be optimized", @"tooltip")]; + } +} + +- (void)setError:(nonnull NSString *)text { + self.isFailed = YES; + [self setStatus:@"err" order:9 text:text]; +} + +- (void)setStatus:(nonnull NSString *)imageName order:(NSInteger)order text:(nonnull NSString *)text { + // Keep failed status visible instead of replacing with progress/noopt/etc + if (self.isFailed && ![imageName isEqualToString:@"ok"] && ![imageName isEqualToString:@"err"]) { + return; + } + + self->statusOrder = order; + self.statusText = text; + self.statusImageName = imageName; +} + +- (nonnull NSString *)description { + return [NSString stringWithFormat:@"%@ %ld/%ld/%ld (workers %ld) s=%d d=%d/%d %@", self.filePath, + [self.byteSizeOriginal longValue],(long)self.wipInput.byteSize,(long)self.savedOutput.byteSize, + [workers count], stopping, isDone, isFailed, self.statusText]; +} + +#pragma mark QL + +- (NSURL *)previewItemURL { + return [self optimizedFileWithFallback:true].path; +} + +- (NSString *)previewItemTitle { + return displayName; +} + +@end diff --git a/imageoptim/Backend/JobQueue.h b/imageoptim/Backend/JobQueue.h new file mode 100644 index 00000000..1736dbac --- /dev/null +++ b/imageoptim/Backend/JobQueue.h @@ -0,0 +1,18 @@ + +#import + +@class Job, DirScanner; + +NS_ASSUME_NONNULL_BEGIN +@interface JobQueue : NSObject + +- (void)addJob:(Job *)f; +- (void)addDirScanner:(DirScanner *)d; +- (void)wait; +- (void)cleanup; +- (NSNumber *)queueCount; +@property (assign, atomic) BOOL isBusy; + +- (nullable instancetype)initWithCPUs:(NSInteger)cpus dirs:(NSInteger)dirs files:(NSInteger)fileops defaults:(NSUserDefaults *)defaults; +@end +NS_ASSUME_NONNULL_END diff --git a/imageoptim/Backend/JobQueue.m b/imageoptim/Backend/JobQueue.m new file mode 100644 index 00000000..14b839de --- /dev/null +++ b/imageoptim/Backend/JobQueue.m @@ -0,0 +1,94 @@ + +#import "JobQueue.h" +#import "Job.h" +#import "DirScanner.h" + +@interface JobQueue () +@property (strong) NSUserDefaults *defaults; +@end + +@implementation JobQueue { + NSOperationQueue *cpuQueue; + NSOperationQueue *fileIOQueue; + NSOperationQueue *dirWorkerQueue; + dispatch_queue_t serialQueue; + + dispatch_source_t operationCountUpdateQueue; +} + +@synthesize isBusy; + +- (instancetype)initWithCPUs:(NSInteger)cpus dirs:(NSInteger)dirs files:(NSInteger)fileops defaults:(NSUserDefaults *)defaults { + self = [super init]; + if (self) { + self.defaults = defaults; + BOOL lowPriority = [defaults boolForKey:@"RunLowPriority"]; + + serialQueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL); + + cpuQueue = [NSOperationQueue new]; + cpuQueue.name = @"cpuQueue"; + cpuQueue.maxConcurrentOperationCount = cpus ? cpus : NSOperationQueueDefaultMaxConcurrentOperationCount; + + dirWorkerQueue = [NSOperationQueue new]; + dirWorkerQueue.name = @"dirWorkerQueue"; + dirWorkerQueue.maxConcurrentOperationCount = dirs; + + fileIOQueue = [NSOperationQueue new]; + fileIOQueue.name = @"fileIOQueue"; + fileIOQueue.maxConcurrentOperationCount = fileops ? fileops : 2; + + if ([cpuQueue respondsToSelector:@selector(setQualityOfService:)]) { + cpuQueue.qualityOfService = lowPriority ? NSQualityOfServiceUtility : NSQualityOfServiceUserInitiated; + fileIOQueue.qualityOfService = lowPriority ? NSQualityOfServiceUtility : NSQualityOfServiceUserInitiated; + dirWorkerQueue.qualityOfService = NSQualityOfServiceUserInitiated; + } + + [cpuQueue addObserver:self forKeyPath:@"operationCount" options:0 context:NULL]; + [dirWorkerQueue addObserver:self forKeyPath:@"operationCount" options:0 context:NULL]; + [fileIOQueue addObserver:self forKeyPath:@"operationCount" options:0 context:NULL]; + + operationCountUpdateQueue = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_OR, 0, 0, dispatch_get_main_queue()); + dispatch_source_set_event_handler(operationCountUpdateQueue, ^{ + self.isBusy = self->cpuQueue.operationCount > 0 || self->dirWorkerQueue.operationCount > 0 || self->fileIOQueue.operationCount > 0; + }); + dispatch_resume(operationCountUpdateQueue); + } + return self; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + dispatch_source_merge_data(operationCountUpdateQueue, 1); +} + +- (void)addJob:(Job *)f { + [f enqueueWorkersInCPUQueue:cpuQueue fileIOQueue:fileIOQueue serialQueue:serialQueue defaults:self.defaults]; +} + +- (void)addDirScanner:(DirScanner *)d { + [dirWorkerQueue addOperation:d]; +} + +- (NSNumber *)queueCount { + return @(cpuQueue.operationCount + dirWorkerQueue.operationCount + fileIOQueue.operationCount); +} + +- (void)cleanup { + [dirWorkerQueue cancelAllOperations]; + [fileIOQueue cancelAllOperations]; + [cpuQueue cancelAllOperations]; +} + +- (void)wait { + // any queue may be re-filled while waiting for another queue. This is wonky :( + do { + [dirWorkerQueue waitUntilAllOperationsAreFinished]; + [fileIOQueue waitUntilAllOperationsAreFinished]; + [cpuQueue waitUntilAllOperationsAreFinished]; + } + while (dirWorkerQueue.operationCount > 0 || fileIOQueue.operationCount > 0 || cpuQueue.operationCount > 0); +} + +@end diff --git a/imageoptim/Backend/TempFile.h b/imageoptim/Backend/TempFile.h new file mode 100644 index 00000000..dfce29cc --- /dev/null +++ b/imageoptim/Backend/TempFile.h @@ -0,0 +1,13 @@ +// +// TempFile.h +// ImageOptim +// +// Created by Kornel on 12/01/2017. +// +// + +#import +#import "File.h" + +@interface TempFile : File +@end diff --git a/imageoptim/Backend/TempFile.m b/imageoptim/Backend/TempFile.m new file mode 100644 index 00000000..3b32c722 --- /dev/null +++ b/imageoptim/Backend/TempFile.m @@ -0,0 +1,20 @@ +// +// TempFile.m +// ImageOptim +// +// Created by Kornel on 12/01/2017. +// +// + +#import "TempFile.h" + +@implementation TempFile + +- (void)dealloc { + NSURL *path = self.path; + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + [[NSFileManager defaultManager] removeItemAtURL:path error:nil]; + }); +} + +@end diff --git a/imageoptim/Backend/Tests/BackendTests.m b/imageoptim/Backend/Tests/BackendTests.m new file mode 100644 index 00000000..ad2e9a80 --- /dev/null +++ b/imageoptim/Backend/Tests/BackendTests.m @@ -0,0 +1,72 @@ +// +// BackendTests.m +// BackendTests +// +// Created by Kornel on 20/04/2015. +// +// + +@import Cocoa; +#import +#import "Job.h" +#import "JobQueue.h" + +@interface BackendTests : XCTestCase + +@end + +@implementation BackendTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testCompressOne { + NSURL *origPath = [[NSBundle bundleForClass:[self class]] URLForResource:@"unoptimized" withExtension:@"png"]; + NSURL *path = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[[NSUUID UUID] UUIDString]]]; + + NSFileManager *fm = [NSFileManager defaultManager]; + XCTAssertTrue([fm copyItemAtURL:origPath toURL:path error:nil]); + + Job *f = [[Job alloc] initWithFilePath:path resultsDatabase:nil]; + JobQueue *q = [[JobQueue alloc] initWithCPUs:4 + dirs:1 + files:4 + defaults:[NSUserDefaults standardUserDefaults]]; + + [q addJob:f]; + XCTAssertTrue([f isBusy]); + XCTAssertFalse([f isDone]); + XCTAssertFalse([f isFailed]); + [q wait]; + XCTAssertFalse([f isBusy]); + + NSNumber *size, *origSize; + [path removeAllCachedResourceValues]; + [origPath removeAllCachedResourceValues]; + + XCTAssertTrue([path getResourceValue:&size forKey:NSURLFileSizeKey error:nil]); + XCTAssertTrue([origPath getResourceValue:&origSize forKey:NSURLFileSizeKey error:nil]); + + XCTAssertTrue([f isDone]); + XCTAssertFalse([f isFailed]); + XCTAssertFalse([f isStoppable]); + + XCTAssertLessThan(1, 2); + XCTAssertLessThan([size integerValue], [origSize integerValue]); + XCTAssertLessThanOrEqual(1, 2); + XCTAssertLessThanOrEqual([size integerValue], 5552); + + XCTAssertTrue([f canRevert]); + + XCTAssertEqual([[f byteSizeOptimized] integerValue], [size integerValue]); + XCTAssertEqual([[f byteSizeOriginal] integerValue], [origSize integerValue]); +} + +@end diff --git a/imageoptim/Backend/Tests/Info.plist b/imageoptim/Backend/Tests/Info.plist new file mode 100644 index 00000000..f418d046 --- /dev/null +++ b/imageoptim/Backend/Tests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.7.2 + CFBundleSignature + ???? + CFBundleVersion + 2 + + diff --git a/imageoptim/Backend/Tests/unoptimized.png b/imageoptim/Backend/Tests/unoptimized.png new file mode 100644 index 00000000..f91a1a4d Binary files /dev/null and b/imageoptim/Backend/Tests/unoptimized.png differ diff --git a/imageoptim/Workers/AdvCompWorker.h b/imageoptim/Backend/Workers/AdvCompWorker.h similarity index 59% rename from imageoptim/Workers/AdvCompWorker.h rename to imageoptim/Backend/Workers/AdvCompWorker.h index d9f0a6c7..d56825d7 100644 --- a/imageoptim/Workers/AdvCompWorker.h +++ b/imageoptim/Backend/Workers/AdvCompWorker.h @@ -4,13 +4,14 @@ // Created by porneL on 30.wrz.07. // -#import +@import Cocoa; #import "CommandWorker.h" @interface AdvCompWorker : CommandWorker { NSInteger level; - - NSInteger fileSizeOptimized; + + NSInteger fileSizeOptimized; } +- (instancetype)initWithLevel:(NSInteger)opt file:(Job *)aFile; @end diff --git a/imageoptim/Backend/Workers/AdvCompWorker.m b/imageoptim/Backend/Workers/AdvCompWorker.m new file mode 100644 index 00000000..dbbbc14d --- /dev/null +++ b/imageoptim/Backend/Workers/AdvCompWorker.m @@ -0,0 +1,72 @@ +// +// AdvCompWorker.m +// +// Created by porneL on 30.wrz.07. +// + +#import "AdvCompWorker.h" +#import "../Job.h" +#import "../TempFile.h" +#import "../../log.h" + +@implementation AdvCompWorker + +- (instancetype)initWithLevel:(NSInteger)aLevel file:(Job *)aFile { + if (self = [super initWithFile:aFile]) { + level = MAX(1, MIN(4, aLevel)); + } + return self; +} + +- (NSInteger)settingsIdentifier { + return level; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + NSFileManager *fm = [NSFileManager defaultManager]; + NSError *error = nil; + + if (![fm copyItemAtURL:file.path toURL:temp error:&error]) { + IOWarn("Can't make temp copy of %@ in %@; %@", file.path, temp.path, error); + return NO; + } + + NSMutableArray* args = [NSMutableArray arrayWithObjects: + [NSString stringWithFormat:@"-%d",(int)(level ? level : 4)], + @"-z", @"--", temp.path, nil]; + + if (![self taskForKey:@"AdvPng" bundleName:@"advpng" arguments:args]) { + return NO; + } + + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + [task setStandardOutput:commandPipe]; + [task setStandardError:commandPipe]; + + [self launchTask]; + + [self parseLinesFromHandle:commandHandle]; + BOOL ok = [self waitUntilTaskExit]; + + [commandHandle closeFile]; + + if (!ok) return NO; + + return [job setFileOptimized:[file tempCopyOfPath:temp size:fileSizeOptimized] toolName:@"AdvPNG"]; +} + +- (BOOL)parseLine:(NSString *)line { + NSScanner *scan = [NSScanner scannerWithString:line]; + + int original, optimized; + + if ([scan scanInt:&original] && [scan scanInt:&optimized]) { + fileSizeOptimized = optimized; + return YES; + } + return NO; +} + +@end diff --git a/imageoptim/Backend/Workers/CommandWorker.h b/imageoptim/Backend/Workers/CommandWorker.h new file mode 100644 index 00000000..9acf9208 --- /dev/null +++ b/imageoptim/Backend/Workers/CommandWorker.h @@ -0,0 +1,36 @@ +// +// Worker.h +// +// Created by porneL on 23.wrz.07. +// + +@import Cocoa; +#import "Worker.h" + +@class Job, File; + +@interface CommandWorker : Worker { + NSTask *task; +} + +- (BOOL)parseLine:(NSString *)line; +- (void)parseLinesFromHandle:(NSFileHandle *)commandHandle; + +// initialises field task with path and arguments +- (void)taskWithPath:(NSString *)path arguments:(NSArray *)arguments; + +- (long)readNumberAfter:(NSString *)str inLine:(NSString *)line; + +- (void)launchTask; +- (BOOL)waitUntilTaskExit; + +// gets the path of the executable +- (NSString *)executablePathForKey:(NSString *)prefsName bundleName:(NSString *)resourceName; + +- (BOOL)taskForKey:(NSString *)key bundleName:(NSString *)resourceName arguments:(NSArray *)args; + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp; +- (NSString *)pathForExecutableName:(NSString *)resourceName; + +- (NSInteger)timelimitForLevel:(NSInteger)level; +@end diff --git a/imageoptim/Backend/Workers/CommandWorker.m b/imageoptim/Backend/Workers/CommandWorker.m new file mode 100644 index 00000000..e92789f9 --- /dev/null +++ b/imageoptim/Backend/Workers/CommandWorker.m @@ -0,0 +1,193 @@ +// +// Worker.m +// +// Created by porneL on 23.wrz.07. +// + +#import "CommandWorker.h" +#include +#import "../Job.h" +#import "../File.h" +#import "../../log.h" + +@implementation CommandWorker { +} + +- (BOOL)parseLine:(NSString *)line { + /* stub */ + return NO; +} + +- (void)parseLinesFromHandle:(NSFileHandle *)commandHandle { + NSData *temp; + char inputBuffer[4096]; + NSInteger inputBufferPos = 0; + while ((temp = [commandHandle availableData]) && [temp length]) { + const char *tempBytes = [temp bytes]; + NSInteger bytesPos = 0, bytesLength = [temp length]; + + while (bytesPos < bytesLength) { + if (tempBytes[bytesPos] == '\n' || tempBytes[bytesPos] == '\r' || inputBufferPos == sizeof(inputBuffer) - 1) { + inputBuffer[inputBufferPos] = '\0'; + if ([self parseLine:@(inputBuffer)]) { + [commandHandle readDataToEndOfFile]; + return; + } + inputBufferPos = 0; + bytesPos++; + } else { + inputBuffer[inputBufferPos++] = tempBytes[bytesPos++]; + } + } + } +} + +- (void)taskWithPath:(NSString *)path arguments:(NSArray *)arguments; +{ + task = [NSTask new]; + + if ([task respondsToSelector:@selector(setQualityOfService:)]) { + task.qualityOfService = NSQualityOfServiceUtility; + } + + IODebug("Launching %@ %@", path, [arguments componentsJoinedByString:@" "]); + + [task setLaunchPath:path]; + [task setArguments:arguments]; + + // clone the current environment + NSMutableDictionary * + environment =[NSMutableDictionary dictionaryWithDictionary: [[NSProcessInfo processInfo] environment]]; + + // set up for unbuffered I/O + environment[@"NSUnbufferedIO"] = @"YES"; + + [task setEnvironment:environment]; +} + +- (void)run { + NSURL *tempPath = [self tempPath]; + @try { + BOOL keptFile = [self optimizeFile:job.wipInput toTempPath:tempPath]; + if (keptFile && ![self isCancelled]) { + tempPath = nil; + } + } + @catch (NSException *e) { + IOWarn(@"%@ failed: %@: %@", [self className], [e name], e); + [job setError:[NSString stringWithFormat:@"Internal Error: %@ %@", [e name], [e reason]]]; + } + @finally { + if (tempPath) { + [[NSFileManager defaultManager] removeItemAtURL:tempPath error:nil]; + } + } +} + +- (void)launchTask { + @try { + BOOL supportsQoS = [task respondsToSelector:@selector(setQualityOfService:)]; + + if (supportsQoS) { + task.qualityOfService = self.qualityOfService; + } + [task launch]; + + int pid = [task processIdentifier]; + if (pid > 1) setpriority(PRIO_PROCESS, pid, PRIO_MAX / 2); // PRIO_MAX is minimum priority. POSIX is intuitive. + } + @catch (NSException *e) { + IOWarn("Failed to launch %@ - %@", [self className], e); + } +} + +- (BOOL)waitUntilTaskExit { + [task waitUntilExit]; + int status = [task terminationStatus]; + if (status) { + NSLog(@"Task %@ failed with status %d", [self className], status); + return NO; + } + return YES; +} + +- (long)readNumberAfter:(NSString *)str inLine:(NSString *)line { + NSRange substr = [line rangeOfString:str]; + + if (substr.length && [line length] > substr.location + [str length]) { + NSScanner *scan = [NSScanner scannerWithString:line]; + [scan setScanLocation:substr.location + [str length]]; + + int res; + if ([scan scanInt:&res]) { + return res; + } + } + return 0; +} + +- (void)cancel { + @try { + [task terminate]; + } @catch (NSException *e) { + /* ignore */ + } + [super cancel]; +} + +- (BOOL)taskForKey:(NSString *)key bundleName:(NSString *)resourceName arguments:(NSArray *)args { + NSString *executable = [self executablePathForKey:key bundleName:resourceName]; + if (!executable) { + IOWarn("Cannot launch %@", resourceName); + [job setError:[NSString stringWithFormat:NSLocalizedString(@"%@ failed to start", @"tooltip"), key]]; + return NO; + } + [self taskWithPath:executable arguments:args]; + return YES; +} + +- (NSString *)pathForExecutableName:(NSString *)resourceName { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + + NSString *path = [bundle pathForAuxiliaryExecutable:resourceName]; + if (!path) { + path = [bundle pathForResource:resourceName ofType:@""]; + } + + if (path) { + if (![[NSFileManager defaultManager] isExecutableFileAtPath:path]) { + IOWarn("File %@ for %@ is not executable", path, resourceName); + return nil; + } + } + return path; +} + +- (NSString *)executablePathForKey:(NSString *)prefsName bundleName:(NSString *)resourceName { + NSString *path = [self pathForExecutableName:resourceName]; + + if (!path) { + IOWarn("Can't find working executable for %@ - disabling", prefsName); + NSBeep(); + } + return path; +} + +- (NSURL *)tempPath { + static int uid = 0; + if (uid == 0) uid = getpid() << 12; + NSString *filename = [NSString stringWithFormat:@"ImageOptim.%@.%x.%x.temp", [self className], (unsigned int)([Job hash] ^ [self hash]), uid++]; + return [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:filename]]; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)tempPath { + return NO; /*abstract*/ +} + +- (NSInteger)timelimitForLevel:(NSInteger)level { + const NSInteger timelimit = 10 + [job.wipInput byteSize] / 1024; + const NSInteger maxTime = 8 + level * 13; + return MIN(maxTime, timelimit); +} + +@end diff --git a/imageoptim/Workers/GifsicleWorker.h b/imageoptim/Backend/Workers/GifsicleWorker.h similarity index 56% rename from imageoptim/Workers/GifsicleWorker.h rename to imageoptim/Backend/Workers/GifsicleWorker.h index 4d883983..8f86846b 100644 --- a/imageoptim/Workers/GifsicleWorker.h +++ b/imageoptim/Backend/Workers/GifsicleWorker.h @@ -4,12 +4,13 @@ // Created by porneL on 30.wrz.07. // -#import +@import Cocoa; #import "CommandWorker.h" @interface GifsicleWorker : CommandWorker { + NSUInteger quality; BOOL interlace; } -@property (nonatomic,assign) BOOL interlace; +- (instancetype)initWithInterlace:(BOOL)yn quality:(NSUInteger)quality file:(Job *)aFile; @end diff --git a/imageoptim/Backend/Workers/GifsicleWorker.m b/imageoptim/Backend/Workers/GifsicleWorker.m new file mode 100644 index 00000000..c95d2b9b --- /dev/null +++ b/imageoptim/Backend/Workers/GifsicleWorker.m @@ -0,0 +1,75 @@ + +#import "GifsicleWorker.h" +#import "../Job.h" +#import "../TempFile.h" + +@implementation GifsicleWorker + +- (instancetype)initWithInterlace:(BOOL)yn quality:(NSUInteger)aQuality file:(Job *)aFile { + if ((self = [super initWithFile:aFile])) { + quality = aQuality; + interlace = yn; + } + return self; +} + +- (NSInteger)settingsIdentifier { + return interlace + 2 * quality; +} + +-(BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + + NSMutableArray *args = [NSMutableArray arrayWithObjects:@"-o",temp.path, + interlace ? @"--interlace" : @"--no-interlace", + @"-O3", + @"--careful",/* needed for Safari/Preview decoding bug */ + @"--no-comments",@"--no-names",@"--same-delay",@"--same-loopcount",@"--no-warnings", + @"--",file.path,nil]; + + BOOL isLossy = quality < 100; + + if (isLossy) { + int loss = pow(100 - quality, 1.8) / 5.0; + if ([file isSmall]) { + loss = 1 + loss / 8; // Spare GIF icons + } else if (![file isLarge]) { + loss = 1 + loss / 2; // Spare GIF images + } + [args insertObject:[NSString stringWithFormat:@"--lossy=%d", loss] atIndex:0]; + } + + if (![self taskForKey:@"Gifsicle" bundleName:@"gifsicle" arguments:args]) { + return NO; + } + + NSFileHandle *devnull = [NSFileHandle fileHandleWithNullDevice]; + + [task setStandardInput:devnull]; + [task setStandardError:devnull]; + [task setStandardOutput:devnull]; + + [self launchTask]; + BOOL ok = [self waitUntilTaskExit]; + + [devnull closeFile]; + + if (!ok) return NO; + + NSString *toolName = isLossy ? @"Giflossy" : (interlace ? @"Gifsicle interlaced" : @"Gifsicle"); + + TempFile *output = [file tempCopyOfPath:temp]; + if (!output) { + return NO; + } + + if (isLossy) { + BOOL isSignificantlySmaller = output.byteSize * (105 + (100 - quality) / 2) / 100 < file.byteSize; + if (!isSignificantlySmaller) { + return NO; + } + } + + return [job setFileOptimized:output toolName:toolName]; +} + +@end diff --git a/imageoptim/Backend/Workers/GuetzliWorker.h b/imageoptim/Backend/Workers/GuetzliWorker.h new file mode 100644 index 00000000..0aa40e6f --- /dev/null +++ b/imageoptim/Backend/Workers/GuetzliWorker.h @@ -0,0 +1,23 @@ +// +// GuetzliWorker.h +// ImageOptim +// +// Created by Peter Kovacs on 3/17/17. +// +// + +#ifndef GuetzliWorker_h +#define GuetzliWorker_h + +@import Cocoa; +#import "CommandWorker.h" + +@interface GuetzliWorker : CommandWorker { + NSInteger level; + dispatch_queue_t queue; +} + +- (instancetype)initWithDefaults:(NSUserDefaults *)defaults serialQueue:(dispatch_queue_t)q file:(Job *)aFile; +@end + +#endif /* GuetzliWorker_h */ diff --git a/imageoptim/Backend/Workers/GuetzliWorker.m b/imageoptim/Backend/Workers/GuetzliWorker.m new file mode 100644 index 00000000..15d41748 --- /dev/null +++ b/imageoptim/Backend/Workers/GuetzliWorker.m @@ -0,0 +1,85 @@ +// +// GuezilWorker.m +// ImageOptim +// +// Created by Peter Kovacs on 3/17/17. +// +// + +#import "GuetzliWorker.h" +#import "../Job.h" +#import "../TempFile.h" +#import "../../log.h" + +@implementation GuetzliWorker + +- (instancetype)initWithDefaults:(NSUserDefaults *)defaults serialQueue:(dispatch_queue_t)q file:(Job *)aFile { + if (self = [super initWithFile:aFile]) { + queue = q; + level = [defaults boolForKey:@"LossyEnabled"] ? [defaults integerForKey:@"JpegOptimMaxQuality"] : 95; + if (level < 84) { + level = 84; + } + } + return self; +} + +- (BOOL)makesNonOptimizingModifications { + return YES; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + BOOL smallFile = [file isSmall]; + + NSMutableArray *args = [NSMutableArray arrayWithObjects: + @"--quality", [NSString stringWithFormat:@"%ld", (long)level], + @"--memlimit", smallFile ? @"2000" : @"6000", + temp.path, + temp.path, + nil]; + + if (![self taskForKey:@"Guetzli" bundleName:@"guetzli" arguments:args]) { + return NO; + } + + NSString *guetzliPath = [self pathForExecutableName:@"guetzli"]; + if (!guetzliPath) { + return NO; + } + + NSBitmapImageRep *inputRep = (NSBitmapImageRep *)[NSBitmapImageRep imageRepWithContentsOfURL:file.path]; + NSBitmapImageRep *sRGBRep = [inputRep bitmapImageRepByConvertingToColorSpace:[NSColorSpace sRGBColorSpace] renderingIntent:NSColorRenderingIntentRelativeColorimetric]; + NSData *sRGBPNGData = [sRGBRep representationUsingType:NSBitmapImageFileTypePNG properties:@{}]; + [sRGBPNGData writeToURL:temp atomically:NO]; + + BOOL __block ok = NO; + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + void (^run)(void) = ^{ + [self->task setStandardOutput:commandPipe]; + [self->task setStandardError:commandPipe]; + + [self launchTask]; + + [commandHandle readToEndOfFileInBackgroundAndNotify]; + + ok = [self waitUntilTaskExit]; + }; + if ([file isLarge]) { + // Guetzli uses so much memory, that it's dangerous to run all images in parallel + dispatch_sync(queue, run); + } else { + run(); + } + + [commandHandle closeFile]; + + if (!ok) return NO; + + TempFile *output = [file tempCopyOfPath:temp]; + + return [job setFileOptimized:output toolName:@"Guetzli"]; +} + +@end diff --git a/imageoptim/Workers/JpegoptimWorker.h b/imageoptim/Backend/Workers/JpegoptimWorker.h similarity index 70% rename from imageoptim/Workers/JpegoptimWorker.h rename to imageoptim/Backend/Workers/JpegoptimWorker.h index f31d5ae3..c6215c12 100644 --- a/imageoptim/Workers/JpegoptimWorker.h +++ b/imageoptim/Backend/Workers/JpegoptimWorker.h @@ -4,7 +4,7 @@ // Created by porneL on 7.paĆș.07. // -#import +@import Cocoa; #import "CommandWorker.h" @interface JpegoptimWorker : CommandWorker { @@ -12,4 +12,6 @@ NSInteger fileSizeOptimized; BOOL strip; } + +- (instancetype)initWithDefaults:(NSUserDefaults *)defaults file:(Job *)aFile; @end diff --git a/imageoptim/Backend/Workers/JpegoptimWorker.m b/imageoptim/Backend/Workers/JpegoptimWorker.m new file mode 100644 index 00000000..f44cda10 --- /dev/null +++ b/imageoptim/Backend/Workers/JpegoptimWorker.m @@ -0,0 +1,89 @@ +// +// JpegoptimWorker.m +// +// Created by porneL on 7.paĆș.07. +// + +#import "JpegoptimWorker.h" +#import "../Job.h" +#import "../TempFile.h" +#import "../../log.h" + +@implementation JpegoptimWorker + +- (NSInteger)settingsIdentifier { + return maxquality * 2 + strip; +} + +- (instancetype)initWithDefaults:(NSUserDefaults *)defaults file:(Job *)aFile { + if (self = [super initWithFile:aFile]) { + // Sharing setting with jpegtran + strip = [defaults boolForKey:@"JpegTranStripAll"]; + maxquality = [defaults boolForKey:@"LossyEnabled"] ? [defaults integerForKey:@"JpegOptimMaxQuality"] : 100; + } + return self; +} + +- (BOOL)makesNonOptimizingModifications { + return maxquality < 100; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + NSFileManager *fm = [NSFileManager defaultManager]; + NSError *error = nil; + + if (![fm copyItemAtURL:file.path toURL:temp error:&error]) { + IOWarn("Can't make temp copy of %@ in %@", file.path, temp.path); + } + + BOOL lossy = maxquality > 10 && maxquality < 100; + + NSMutableArray *args = [NSMutableArray arrayWithObjects: + strip ? @"--strip-all" : @"--strip-none", + lossy ? @"--all-progressive" : @"--all-normal", // lossless progressive is redundant with jpegtran, but lossy baseline would prevent parallelisation + @"-v", // needed for parsing output size + @"--", temp.path, nil]; + + if (lossy) { + [args insertObject:[NSString stringWithFormat:@"-m%d", (int)maxquality] atIndex:0]; + } + + if (![self taskForKey:@"JpegOptim" bundleName:@"jpegoptim" arguments:args]) { + return NO; + } + + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + [task setStandardOutput:commandPipe]; + [task setStandardError:commandPipe]; + + [self launchTask]; + + [self parseLinesFromHandle:commandHandle]; + [task waitUntilExit]; + + [commandHandle closeFile]; + + BOOL isSignificantlySmaller; + @synchronized(file) { + // require at least 5% gain when doing lossy optimization + isSignificantlySmaller = file.byteSize * 0.95 > fileSizeOptimized; + } + + if (![self makesNonOptimizingModifications] || isSignificantlySmaller) { + return [job setFileOptimized:[file tempCopyOfPath:temp size:fileSizeOptimized] toolName:lossy ? [NSString stringWithFormat:@"JpegOptim %d%%", (int)maxquality] : @"JpegOptim"]; + } + return NO; +} + +- (BOOL)parseLine:(NSString *)line { + NSInteger size; + if ((size = [self readNumberAfter:@" --> " inLine:line])) { + fileSizeOptimized = size; + return YES; + } + return NO; +} + +@end diff --git a/imageoptim/Workers/JpegtranWorker.h b/imageoptim/Backend/Workers/JpegtranWorker.h similarity index 57% rename from imageoptim/Workers/JpegtranWorker.h rename to imageoptim/Backend/Workers/JpegtranWorker.h index b39a5394..b84fda5c 100644 --- a/imageoptim/Workers/JpegtranWorker.h +++ b/imageoptim/Backend/Workers/JpegtranWorker.h @@ -4,11 +4,12 @@ // Created by porneL on 7.paĆș.07. // -#import +@import Cocoa; #import "CommandWorker.h" @interface JpegtranWorker : CommandWorker { - BOOL strip, jpegrescan; + BOOL strip; } +- (instancetype)initWithDefaults:(NSUserDefaults *)defaults file:(Job *)aFile; @end diff --git a/imageoptim/Backend/Workers/JpegtranWorker.m b/imageoptim/Backend/Workers/JpegtranWorker.m new file mode 100644 index 00000000..6a96f56f --- /dev/null +++ b/imageoptim/Backend/Workers/JpegtranWorker.m @@ -0,0 +1,71 @@ +// +// JpegtranWorker.m +// +// Created by porneL on 7.paĆș.07. +// + +#import "JpegtranWorker.h" +#import "../Job.h" +#import "../TempFile.h" + +@implementation JpegtranWorker + +- (NSInteger)settingsIdentifier { + return strip; +} + +- (instancetype)initWithDefaults:(NSUserDefaults *)defaults file:(Job *)aFile { + if (self = [super initWithFile:aFile]) { + strip = [defaults boolForKey:@"JpegTranStripAll"]; + } + return self; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + // eh, handling of paths starting with "-" is unsafe here. Hopefully all paths from dropped files will be absolute... + NSMutableArray *args = [NSMutableArray arrayWithObject:file.path]; + + [args insertObject:@"-outfile" atIndex:0]; + [args insertObject:temp.path atIndex:1]; + + [args insertObject:@"-optimize" atIndex:0]; + [args insertObject:@"-copy" atIndex:0]; + [args insertObject:strip ? @"none" : @"all" atIndex:1]; + + if (![self taskForKey:@"JpegTran" bundleName:@"jpegtran" arguments:args]) { + return NO; + } + + NSString *jpegtranPath = [self pathForExecutableName:@"jpegtran"]; + if (!jpegtranPath) { + return NO; + } + [task setCurrentDirectoryPath:[jpegtranPath stringByDeletingLastPathComponent]]; + + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + [task setStandardOutput:commandPipe]; + [task setStandardError:commandPipe]; + + [self launchTask]; + + [commandHandle readToEndOfFileInBackgroundAndNotify]; + BOOL ok = [self waitUntilTaskExit]; + + [commandHandle closeFile]; + + if (!ok) return NO; + + return [job setFileOptimized:[file tempCopyOfPath:temp] toolName:@"MozJPEG"]; +} + +- (BOOL)parseLine:(NSString *)line { + NSRange substr = [line rangeOfString:@"End Of Image"]; + if (substr.length) { + return YES; + } + return NO; +} + +@end diff --git a/imageoptim/Backend/Workers/OxiPngWorker.h b/imageoptim/Backend/Workers/OxiPngWorker.h new file mode 100644 index 00000000..8f7db503 --- /dev/null +++ b/imageoptim/Backend/Workers/OxiPngWorker.h @@ -0,0 +1,16 @@ +// +// AdvCompWorker.h +// +// Created by porneL on 30.wrz.07. +// + +@import Cocoa; +#import "CommandWorker.h" + +@interface OxiPngWorker : CommandWorker { + NSInteger optlevel; + BOOL strip; +} + +- (instancetype)initWithLevel:(NSInteger)level stripMetadata:(BOOL)aStrip file:(Job *)aFile; +@end diff --git a/imageoptim/Backend/Workers/OxiPngWorker.m b/imageoptim/Backend/Workers/OxiPngWorker.m new file mode 100644 index 00000000..a000e4ce --- /dev/null +++ b/imageoptim/Backend/Workers/OxiPngWorker.m @@ -0,0 +1,54 @@ +// +// AdvCompWorker.m +// +// Created by porneL on 30.wrz.07. +// + +#import "OxiPngWorker.h" +#import "../Job.h" +#import "../TempFile.h" + +@implementation OxiPngWorker + +- (instancetype)initWithLevel:(NSInteger)level stripMetadata:(BOOL)aStrip file:(Job *)aJob { + if (self = [super initWithFile:aJob]) { + optlevel = MAX(2, MIN(level, 6)); + strip = aStrip; + } + return self; +} + + +-(NSInteger)settingsIdentifier { + return 2*(optlevel*2 + strip); +} + +-(BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + + NSMutableArray *args = [NSMutableArray arrayWithObjects: [NSString stringWithFormat:@"-o%d",(int)(optlevel ? optlevel : 6)], + @"-i0", @"-a", + @"--out",temp.path,@"--",file.path,nil]; + if (strip) { + [args insertObject:@"--strip=safe" atIndex:0]; + } + + if (![self taskForKey:@"OptiPng" bundleName:@"oxipng" arguments:args]) { + return NO; + } + + NSFileHandle *devnull = [NSFileHandle fileHandleWithNullDevice]; + + [task setStandardInput:devnull]; + [task setStandardError:devnull]; + [task setStandardOutput:devnull]; + + [self launchTask]; + + BOOL ok = [self waitUntilTaskExit]; + + if (!ok) return NO; + + return [job setFileOptimized:[file tempCopyOfPath:temp] toolName:@"OxiPNG"]; +} + +@end diff --git a/imageoptim/Backend/Workers/PngCrushWorker.h b/imageoptim/Backend/Workers/PngCrushWorker.h new file mode 100644 index 00000000..9f5c797c --- /dev/null +++ b/imageoptim/Backend/Workers/PngCrushWorker.h @@ -0,0 +1,18 @@ +// +// PngCrushWorker.h +// +// Created by porneL on 1.paĆș.07. +// + +@import Cocoa; +#import "CommandWorker.h" + +@interface PngCrushWorker : CommandWorker { + int firstIdatSize; + BOOL strip, brute; +} + +- (instancetype)initWithLevel:(NSInteger)level defaults:(NSUserDefaults *)defaults file:(Job *)aFile; +@property (readonly) BOOL makesNonOptimizingModifications; + +@end diff --git a/imageoptim/Backend/Workers/PngCrushWorker.m b/imageoptim/Backend/Workers/PngCrushWorker.m new file mode 100644 index 00000000..6de194d7 --- /dev/null +++ b/imageoptim/Backend/Workers/PngCrushWorker.m @@ -0,0 +1,69 @@ +// +// PngCrushWorker.m +// +// Created by porneL on 1.paĆș.07. +// + +#import "PngCrushWorker.h" +#import "../Job.h" +#import "../TempFile.h" + +@implementation PngCrushWorker +- (instancetype)initWithLevel:(NSInteger)level defaults:(NSUserDefaults *)defaults file:(Job *)aFile { + if ((self = [super initWithFile:aFile])) { + strip = [defaults boolForKey:@"PngOutRemoveChunks"]; + brute = level >= 6; + } + return self; +} + +- (NSInteger)settingsIdentifier { + return strip; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + NSMutableArray *args = [NSMutableArray arrayWithObjects:@"-nofilecheck", @"-bail", @"-blacken", @"-reduce", @"-cc", @"--", file.path, temp.path, nil]; + + // Reusing PngOut config here + if (strip) { + [args insertObject:@"-rem" atIndex:0]; + [args insertObject:@"alla" atIndex:1]; + } + + if ([file isSmall] || (brute && ![file isLarge])) { + [args insertObject:@"-brute" atIndex:0]; + } + + if (![self taskForKey:@"PngCrush" bundleName:@"pngcrush" arguments:args]) { + return NO; + } + + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + [task setStandardOutput:commandPipe]; + [task setStandardError:commandPipe]; + + [self launchTask]; + + [commandHandle readToEndOfFileInBackgroundAndNotify]; + + BOOL ok = [self waitUntilTaskExit]; + + [commandHandle closeFile]; + + if (!ok) return NO; + + TempFile *output = [file tempCopyOfPath:temp]; + // pngcrush sometimes writes only PNG header (70 bytes)! + if (output && output.byteSize > 70) { + return [job setFileOptimized:output toolName:@"Pngcrush"]; + } + return NO; +} + +- (BOOL)makesNonOptimizingModifications { + return strip; +} + +@end diff --git a/imageoptim/Backend/Workers/PngoutWorker.h b/imageoptim/Backend/Workers/PngoutWorker.h new file mode 100644 index 00000000..efbd36e2 --- /dev/null +++ b/imageoptim/Backend/Workers/PngoutWorker.h @@ -0,0 +1,20 @@ +// +// PngoutWorker.h +// +// Created by porneL on 29.wrz.07. +// + +@import Cocoa; +#import "CommandWorker.h" + +@interface PngoutWorker : CommandWorker { + BOOL removechunks; + NSInteger level, timelimit; + + NSInteger fileSizeOptimized; +} + +- (instancetype)initWithLevel:(NSInteger)level defaults:(NSUserDefaults *)defaults file:(Job *)aFile; +@property (readonly) BOOL makesNonOptimizingModifications; + +@end diff --git a/imageoptim/Backend/Workers/PngoutWorker.m b/imageoptim/Backend/Workers/PngoutWorker.m new file mode 100644 index 00000000..d70ed158 --- /dev/null +++ b/imageoptim/Backend/Workers/PngoutWorker.m @@ -0,0 +1,113 @@ +// +// PngoutWorker.m +// ImageOptim +// +// Created by porneL on 29.wrz.07. +// Copyright 2007 __MyCompanyName__. All rights reserved. +// + +#import "PngoutWorker.h" +#import "../Job.h" +#import "../TempFile.h" +#import "../../log.h" + +@implementation PngoutWorker + +- (instancetype)initWithLevel:(NSInteger)aLevel defaults:(NSUserDefaults *)defaults file:(Job *)aFile { + if (self = [super initWithFile:aFile]) { + level = !aLevel ? 2 : (aLevel >= 4 ? 0 : 1); + removechunks = [defaults boolForKey:@"PngOutRemoveChunks"]; + timelimit = [self timelimitForLevel:aLevel]; + } + return self; +} + +- (NSInteger)settingsIdentifier { + return level * 4 + removechunks * 2 + (timelimit < 60 ? 1 : 0); +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + // uses stdout for file to force progress output to unbufferred stderr + NSMutableArray *args = [NSMutableArray arrayWithObjects:@"-v", /*@"--",*/ file.path, @"-", nil]; + + [args insertObject:@"-r" atIndex:0]; + + NSInteger actualLevel = level; + if ([file isLarge] && level < 2) { + actualLevel++; // use faster setting for large files + } + + if (actualLevel) { // s0 is default + [args insertObject:[NSString stringWithFormat:@"-s%d", (int)actualLevel] atIndex:0]; + } + + if (!removechunks) { // -k0 (remove) is default + [args insertObject:@"-k1" atIndex:0]; + } + + if (![self taskForKey:@"PngOut" bundleName:@"pngout" arguments:args]) { + return NO; + } + + NSError *err = nil; + [[NSData new] writeToURL:temp atomically:NO]; + NSFileHandle *fileOutputHandle = [NSFileHandle fileHandleForWritingToURL:temp error:&err]; + + if (!fileOutputHandle) { + IOWarn("Can't create %@ %@", temp.path, err); + return NO; + } + + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + [task setStandardOutput:fileOutputHandle]; + [task setStandardError:commandPipe]; + + [task performSelector:@selector(interrupt) withObject:nil afterDelay:timelimit]; + + [self launchTask]; + + [self parseLinesFromHandle:commandHandle]; + + [NSObject cancelPreviousPerformRequestsWithTarget:task selector:@selector(interrupt) object:nil]; + + [task waitUntilExit]; + [commandHandle closeFile]; + [fileOutputHandle closeFile]; + + int status = [task terminationStatus]; // status = 2 early exit + if (status && (status != 2 || !fileSizeOptimized)) { + return NO; + } + + if (fileSizeOptimized) { + return [job setFileOptimized:[file tempCopyOfPath:temp] toolName:@"PNGOUT"]; + } + return NO; +} + +- (BOOL)makesNonOptimizingModifications { + return removechunks; +} + +- (BOOL)parseLine:(NSString *)line { + // run PNGOUT killing timer + [[NSRunLoop currentRunLoop] limitDateForMode:NSDefaultRunLoopMode]; + + NSScanner *scan = [NSScanner scannerWithString:line]; + + if ([line length] > 4 && [[line substringToIndex:4] isEqual:@"Out:"]) { + [scan setScanLocation:4]; + int byteSize = 0; + if ([scan scanInt:&byteSize] && byteSize) { + fileSizeOptimized = byteSize; + } + } else if ([line length] >= 3 && [line characterAtIndex:2] == '%') { + } else if ([line length] >= 4 && [[line substringToIndex:4] isEqual:@"Took"]) { + return YES; + } + return NO; +} + +@end diff --git a/imageoptim/Backend/Workers/PngquantWorker.h b/imageoptim/Backend/Workers/PngquantWorker.h new file mode 100644 index 00000000..aa9d225d --- /dev/null +++ b/imageoptim/Backend/Workers/PngquantWorker.h @@ -0,0 +1,12 @@ + +@import Cocoa; +#import "CommandWorker.h" + +@interface PngquantWorker : CommandWorker { + NSUInteger minQuality, speed; +} + +- (id)initWithLevel:(NSInteger)level minQuality:(NSUInteger)aMinQ file:(Job *)f; +- (BOOL)makesNonOptimizingModifications; + +@end diff --git a/imageoptim/Backend/Workers/PngquantWorker.m b/imageoptim/Backend/Workers/PngquantWorker.m new file mode 100644 index 00000000..173b2e05 --- /dev/null +++ b/imageoptim/Backend/Workers/PngquantWorker.m @@ -0,0 +1,79 @@ + +#import "PngquantWorker.h" +#import "../Job.h" +#import "../TempFile.h" +#import "../../log.h" + +@implementation PngquantWorker + +- (id)initWithLevel:(NSInteger)level minQuality:(NSUInteger)aMinQ file:(Job *)f { + if (self = [super initWithFile:f]) { + minQuality = aMinQ; + speed = MIN(3, 7 - level); + } + return self; +} + +- (NSInteger)settingsIdentifier { + return minQuality; +} + +-(BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + + NSUInteger maxQuality = MIN(100, minQuality+20); + NSArray *args = @[@"256",@"--skip-if-larger", + [NSString stringWithFormat:@"-s%d", (int)speed], + @"--quality", [NSString stringWithFormat:@"%d-%d", (int)minQuality, (int)maxQuality], + @"-"]; + if (![self taskForKey:@"PngQuant" bundleName:@"pngquant" arguments:args]) { + return NO; + } + + NSError *err = nil; + NSFileHandle *fileInputHandle = [NSFileHandle fileHandleForReadingFromURL:file.path error:&err]; + if (!fileInputHandle) { + IOWarn("Can't read %@ %@", file.path, err); + return NO; + } + + [[NSData new] writeToURL:temp atomically:NO]; + NSFileHandle *fileOutputHandle = [NSFileHandle fileHandleForWritingToURL:temp error:&err]; + + if (!fileOutputHandle) { + IOWarn("Can't create %@ %@", temp.path, err); + return NO; + } + + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + [task setStandardInput:fileInputHandle]; + [task setStandardOutput:fileOutputHandle]; + [task setStandardError:commandPipe]; + + [self launchTask]; + [commandHandle readInBackgroundAndNotify]; + + [task waitUntilExit]; + [commandHandle closeFile]; + [fileOutputHandle closeFile]; + + int status = [task terminationStatus]; + // 98/99 == written 24-bit instead (which is fine too, because it applies color profiles) + if (status == 99) { + IODebug(@"pngquant skipped image due to low quality"); + } else if (status == 98) { + IODebug(@"pngquant skipped image due to poor compression"); + } else if (status) { + IODebug(@"pngquant error %d", status); + return NO; + } + + return [job setFileOptimized:[file tempCopyOfPath:temp] toolName:@"pngquant"]; +} + +- (BOOL)makesNonOptimizingModifications { + return minQuality < 100; +} + +@end diff --git a/imageoptim/Backend/Workers/Save.h b/imageoptim/Backend/Workers/Save.h new file mode 100644 index 00000000..bb6a18fc --- /dev/null +++ b/imageoptim/Backend/Workers/Save.h @@ -0,0 +1,13 @@ +// +// Save.h +// ImageOptim +// +// Created by Kornel on 17/04/2015. +// +// + +#import + +@interface Save : NSInvocationOperation + +@end diff --git a/imageoptim/Backend/Workers/Save.m b/imageoptim/Backend/Workers/Save.m new file mode 100644 index 00000000..f75a23a2 --- /dev/null +++ b/imageoptim/Backend/Workers/Save.m @@ -0,0 +1,13 @@ +// +// Save.m +// ImageOptim +// +// Created by Kornel on 17/04/2015. +// +// + +#import "Save.h" + +@implementation Save + +@end diff --git a/imageoptim/Backend/Workers/SvgcleanerWorker.h b/imageoptim/Backend/Workers/SvgcleanerWorker.h new file mode 100644 index 00000000..14d99ca1 --- /dev/null +++ b/imageoptim/Backend/Workers/SvgcleanerWorker.h @@ -0,0 +1,10 @@ + +#import "CommandWorker.h" + +@interface SvgcleanerWorker : CommandWorker { + BOOL useLossy; +} + +- (instancetype)initWithLossy:(BOOL)lossy job:(Job *)f; + +@end diff --git a/imageoptim/Backend/Workers/SvgcleanerWorker.m b/imageoptim/Backend/Workers/SvgcleanerWorker.m new file mode 100644 index 00000000..d69e0be5 --- /dev/null +++ b/imageoptim/Backend/Workers/SvgcleanerWorker.m @@ -0,0 +1,55 @@ + +#import "SvgcleanerWorker.h" +#import "../Job.h" +#import "../TempFile.h" +#import "../../log.h" + +@implementation SvgcleanerWorker + +- (instancetype)initWithLossy:(BOOL)lossy job:(Job *)f { + if (self = [super initWithFile:f]) { + useLossy = lossy; + } + return self; +} + +- (NSInteger)settingsIdentifier { + return useLossy ? 5 : 6; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + NSMutableArray *args = [NSMutableArray arrayWithObjects:@"--stdout", @"--", file.path, + nil]; + + if (![self taskForKey:@"Svgcleaner" bundleName:@"svgcleaner" arguments:args]) { + return NO; + } + + NSError *err = nil; + [[NSData new] writeToURL:temp atomically:NO]; // make the file + NSFileHandle *fileOutputHandle = [NSFileHandle fileHandleForWritingToURL:temp error:&err]; + + if (!fileOutputHandle) { + IOWarn("Can't create %@ %@", temp.path, err); + return NO; + } + + [task setStandardOutput:fileOutputHandle]; + + NSFileHandle *devnull = [NSFileHandle fileHandleWithNullDevice]; + + [task setStandardInput:devnull]; + [task setStandardError:devnull]; + + [self launchTask]; + BOOL ok = [self waitUntilTaskExit]; + + [devnull closeFile]; + [fileOutputHandle closeFile]; + + if (!ok) return NO; + + return [job setFileOptimized:[file tempCopyOfPath:temp] toolName:@"Svgcleaner"]; +} + +@end diff --git a/imageoptim/Backend/Workers/SvgoWorker.h b/imageoptim/Backend/Workers/SvgoWorker.h new file mode 100644 index 00000000..50e68152 --- /dev/null +++ b/imageoptim/Backend/Workers/SvgoWorker.h @@ -0,0 +1,10 @@ + +#import "CommandWorker.h" + +@interface SvgoWorker : CommandWorker { + BOOL useLossy; +} + +- (instancetype)initWithLossy:(BOOL)lossy job:(Job *)f; + +@end diff --git a/imageoptim/Backend/Workers/SvgoWorker.m b/imageoptim/Backend/Workers/SvgoWorker.m new file mode 100644 index 00000000..87b4e72b --- /dev/null +++ b/imageoptim/Backend/Workers/SvgoWorker.m @@ -0,0 +1,58 @@ + +#import "SvgoWorker.h" +#import "../Job.h" +#import "../TempFile.h" +#import "../../log.h" + +@implementation SvgoWorker + +- (instancetype)initWithLossy:(BOOL)lossy job:(Job *)f { + if (self = [super initWithFile:f]) { + useLossy = lossy; + } + return self; +} + +- (NSInteger)settingsIdentifier { + return useLossy ? 5 : 6; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSString *scriptPath = [bundle pathForResource:@"svgo" ofType:@"js"]; + if (!scriptPath) { + IOWarn(@"Broken install, missing script"); + return NO; + } + + NSArray *args = @[ + scriptPath, + useLossy ? @"1" : @"0", + file.path.path, + temp.path + ]; + + NSFileManager *fm = [NSFileManager defaultManager]; + NSString *nodePath1 = @"/usr/local/bin/node"; + NSString *nodePath2 = @"/opt/homebrew/bin/node"; + NSString *nodePath; + if ([fm isExecutableFileAtPath:nodePath1]) { + nodePath = nodePath1; + } else if ([fm isExecutableFileAtPath:nodePath2]) { + nodePath = nodePath2; + } else { + IOWarn(@"Node not installed at %@", nodePath1); + return NO; + } + + [self taskWithPath:nodePath arguments:args]; + + [self launchTask]; + + BOOL ok = [self waitUntilTaskExit]; + if (!ok) return NO; + + return [job setFileOptimized:[file tempCopyOfPath:temp] toolName:useLossy ? @"SVGO" : @"SVGO lite"]; +} + +@end diff --git a/imageoptim/Backend/Workers/Worker.h b/imageoptim/Backend/Workers/Worker.h new file mode 100644 index 00000000..9cd873fe --- /dev/null +++ b/imageoptim/Backend/Workers/Worker.h @@ -0,0 +1,34 @@ +// +// Worker.h +// +// Created by porneL on 30.wrz.07. +// + +@import Cocoa; + +@class Worker; +@class Job; + +@interface Worker : NSOperation { + NSOperation *nextOperation; + Job *job; + int fileType; +} + +// nextOperation will make given operation high priority after this one finishes, +// which can be used to cause domino effect and process operations in order for each file +// as long as there are more queued operations than processing threads. +@property (atomic, strong) NSOperation *nextOperation; +@property (atomic, strong) Job *job; + +- (instancetype)initWithFile:(Job *)aFile; + +- (BOOL)isRelatedTo:(Job *)f; + +@property (readonly) BOOL makesNonOptimizingModifications; + +- (void)run; + +@property (readonly) NSInteger settingsIdentifier; +@property (getter=isIdempotent, readonly) BOOL idempotent; +@end diff --git a/imageoptim/Backend/Workers/Worker.m b/imageoptim/Backend/Workers/Worker.m new file mode 100644 index 00000000..6e0fd74e --- /dev/null +++ b/imageoptim/Backend/Workers/Worker.m @@ -0,0 +1,97 @@ +// +// Worker.m +// +// Created by porneL on 30.wrz.07. +// + +#import "Worker.h" +#import "Job.h" +#import "File.h" +#import "log.h" + +@implementation Worker + +@synthesize job, nextOperation; + +- (NSInteger)settingsIdentifier { + return 0; +} + +- (instancetype)initWithFile:(Job *)aFile { + if (self = [super init]) { + assert([aFile isKindOfClass:[Job class]]); + self.job = aFile; + } + return self; +} + +- (BOOL)isRelatedTo:(Job *)f { + return (f == job); +} + +- (BOOL)canSkip { + if (![self isIdempotent]) return NO; + + NSDictionary *resultsBySettings; + @synchronized(job) { + resultsBySettings = (job.workersPreviousResults)[[self className]]; + } + if (!resultsBySettings) return NO; + + NSNumber *previousResult = resultsBySettings[@([self settingsIdentifier])]; + if (!previousResult) return NO; + + return job.wipInput.byteSize == [previousResult integerValue]; +} + +- (void)markResultForSkipping { + @synchronized(job) { + NSMutableDictionary *resultsBySettings = (job.workersPreviousResults)[[self className]]; + if (!resultsBySettings) { + resultsBySettings = [NSMutableDictionary new]; + (job.workersPreviousResults)[[self className]] = resultsBySettings; + } + resultsBySettings[@([self settingsIdentifier])] = @(job.wipInput.byteSize); // FIXME: should be passed in, race condition + } +} + +- (void)main { + [job updateStatusOfWorker:self running:YES]; + + @try { + if (![self isCancelled]) { + if (![self canSkip]) { + [self run]; + if (![self isCancelled] && !job.isFailed) { + [self markResultForSkipping]; + } + } else { + IODebug("Skipping %@, because it already optimized %@", [self className], job.fileName); + } + } + } + @finally { + if (![self isCancelled]) { + [nextOperation setQueuePriority:NSOperationQueuePriorityVeryHigh]; + } + [job updateStatusOfWorker:self running:NO]; + } +} + +- (void)run { +} + +- (BOOL)isIdempotent { + return YES; +} + +- (BOOL)makesNonOptimizingModifications { + return NO; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %X ready %d, running %d, deleg %@", + [self className], (unsigned int)[self hash], [self isReady], [self isExecuting], job]; +} + +@end diff --git a/imageoptim/Backend/Workers/ZopfliWorker.h b/imageoptim/Backend/Workers/ZopfliWorker.h new file mode 100644 index 00000000..fbf99401 --- /dev/null +++ b/imageoptim/Backend/Workers/ZopfliWorker.h @@ -0,0 +1,12 @@ + +#import "CommandWorker.h" + +@interface ZopfliWorker : CommandWorker { + NSInteger iterations, timelimit; + BOOL strip, alternativeStrategy; +} + +- (instancetype)initWithLevel:(NSInteger)aLevel defaults:(NSUserDefaults *)defaults file:(Job *)aFile; +@property (atomic, assign) BOOL alternativeStrategy; + +@end diff --git a/imageoptim/Backend/Workers/ZopfliWorker.m b/imageoptim/Backend/Workers/ZopfliWorker.m new file mode 100644 index 00000000..999e0811 --- /dev/null +++ b/imageoptim/Backend/Workers/ZopfliWorker.m @@ -0,0 +1,89 @@ + +#import "ZopfliWorker.h" +#import "../Job.h" +#import "../TempFile.h" + +@implementation ZopfliWorker + +@synthesize alternativeStrategy; + +- (instancetype)initWithLevel:(NSInteger)aLevel defaults:(NSUserDefaults *)defaults file:(Job *)aFile { + if (self = [super initWithFile:aFile]) { + iterations = 3 + 3 * aLevel; + strip = [defaults boolForKey:@"PngOutRemoveChunks"]; + timelimit = [self timelimitForLevel:aLevel]; + } + return self; +} + +- (NSInteger)settingsIdentifier { + return iterations * 4 + strip * 2 + alternativeStrategy; +} + +- (BOOL)optimizeFile:(File *)file toTempPath:(NSURL *)temp { + NSMutableArray *args = [NSMutableArray arrayWithObjects:@"--lossy_transparent", @"-y", /*@"--",*/ file.path, temp.path, nil]; + + if (!strip) { + // FIXME: that's crappy. Should list actual chunks in file :/ + [args insertObject:@"--keepchunks=tEXt,zTXt,iTXt,gAMA,sRGB,iCCP,bKGD,pHYs,sBIT,tIME,oFFs,acTL,fcTL,fdAT,prVW,mkBF,mkTS,mkBS,mkBT" atIndex:0]; + } + + NSInteger actualIterations = iterations; + + NSString *filters = @"--filters=0pme"; + + if ([file isLarge]) { + actualIterations = 5 + actualIterations / 3; // use faster setting for large files + filters = @"--filters=p"; + } + + if (alternativeStrategy) { + timelimit *= 1.4; + filters = @"--filters=bp"; + } else { + timelimit *= 0.8; + } + + [args insertObject:filters atIndex:0]; + + if (actualIterations) { + [args insertObject:[NSString stringWithFormat:@"--iterations=%d", (int)actualIterations] atIndex:0]; + } + + [args insertObject:[NSString stringWithFormat:@"--timelimit=%lu", timelimit] atIndex:0]; + + if (![self taskForKey:@"Zopfli" bundleName:@"zopflipng" arguments:args]) { + return NO; + } + + NSPipe *commandPipe = [NSPipe pipe]; + NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; + + [task setStandardOutput:commandPipe]; + [task setStandardError:commandPipe]; + + [self launchTask]; + + [commandHandle readInBackgroundAndNotify]; + BOOL ok = [self waitUntilTaskExit]; + + [commandHandle closeFile]; + + if (!ok) return NO; + + TempFile *output = [file tempCopyOfPath:temp]; + if (output && output.byteSize > 70) { + return [job setFileOptimized:output toolName:@"Zopfli"]; + } + return NO; +} + +- (BOOL)isIdempotent { + return NO; +} + +- (BOOL)makesNonOptimizingModifications { + return YES; +} + +@end diff --git a/imageoptim/Backend/log.c b/imageoptim/Backend/log.c new file mode 100644 index 00000000..7c63cbb7 --- /dev/null +++ b/imageoptim/Backend/log.c @@ -0,0 +1,9 @@ +// +// Backend.c +// ImageOptim +// +// Created by Kornel on 20/04/2015. +// +// + +int hideLogs = 0; \ No newline at end of file diff --git a/imageoptim/Base.lproj/ImageOptim.strings b/imageoptim/Base.lproj/ImageOptim.strings new file mode 100644 index 00000000..bbb31723 --- /dev/null +++ b/imageoptim/Base.lproj/ImageOptim.strings @@ -0,0 +1,224 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Bring All to Front"; + +/* Menu Item "Window" */ +"19.title" = "Window"; + +/* Menu Item "Minimize" */ +"23.title" = "Minimize"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Window"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Services"; + +/* Menu Item "Services" */ +"131.title" = "Services"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Hide ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Quit ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Hide Others"; + +/* Menu Item "Show All" */ +"150.title" = "Show All"; + +/* Menu Item "Zoom" */ +"197.title" = "Zoom"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "List of files to optimize"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "File"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Size"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Size of file after optimization"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Size of file after optimization"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Savings"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Status"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "About ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Preferences
"; + +/* Menu Item "Edit" */ +"375.title" = "Edit"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Edit"; + +/* Menu Item "Select All" */ +"377.title" = "Select All"; + +/* Menu Item "Undo" */ +"378.title" = "Undo"; + +/* Menu Item "Redo" */ +"384.title" = "Redo"; + +/* Menu Item "Cut" */ +"398.title" = "Cut"; + +/* Menu Item "Copy" */ +"399.title" = "Copy"; + +/* Menu Item "Paste" */ +"400.title" = "Paste"; + +/* Menu Item "Delete" */ +"402.title" = "Delete"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Add new files or directories"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Add"; + +/* Menu Item "File" */ +"429.title" = "File"; + +/* Top-level Main Menu "File" */ +"430.title" = "File"; + +/* Menu Item "Add Files
" */ +"437.title" = "Add Files
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimization status"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimization status"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Close Window"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Help"; + +/* Menu Item "Help" */ +"504.title" = "Help"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim Help"; + +/* Window Title "About ImageOptim" */ +"526.title" = "About ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimize Again"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Check for Updates
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Drag and drop image files onto the area above"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Run optimizations again"; + +/* Button "Again" */ +"635.title" = "Again"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "version"; + +/* TextFieldCell "version" */ +"646.title" = "version"; + +/* Menu Item "Tools" */ +"655.title" = "Tools"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Tools"; + +/* Menu Item "Quick Look" */ +"708.title" = "Quick Look"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Drop images here"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Delete Completed"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimize Optimized"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim Website"; + +/* Menu Item "View Source" */ +"735.title" = "View Source"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Optimized Size"; + +/* Menu Item "Savings" */ +"741.title" = "Savings"; + +/* Menu Item "Best tool" */ +"747.title" = "Best tool"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Best tool"; + +/* Menu Item "Original Size" */ +"791.title" = "Original Size"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Original Size"; + +/* Menu Item "Show Columns" */ +"809.title" = "Show Columns"; + +/* Menu Item "Donate" */ +"820.title" = "Donate"; + +/* Class = "NSButton"; ibExternalAccessibilityDescription = "Show settings"; ObjectID = "Chx-W4-45F"; */ +"Chx-W4-45F.ibExternalAccessibilityDescription" = "Show settings"; + +/* Class = "NSButton"; ibShadowedToolTip = "Settings"; ObjectID = "Chx-W4-45F"; */ +"Chx-W4-45F.ibShadowedToolTip" = "Settings"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Revert to Original"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Quality: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Stop"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Copy as Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Show in Finder"; + +/* Class = "NSMenuItem"; title = "Web API
"; ObjectID = "eaB-hR-QWi"; */ +"eaB-hR-QWi.title" = "Web API
"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Lossy minification"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Show in Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Status"; diff --git a/imageoptim/Base.lproj/ImageOptim.xib b/imageoptim/Base.lproj/ImageOptim.xib new file mode 100644 index 00000000..a9ed49ad --- /dev/null +++ b/imageoptim/Base.lproj/ImageOptim.xib @@ -0,0 +1,831 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IOStatusImage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +CA + + + + + + + + + + + + + + + + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + NSNegateBoolean + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fileName + byteSize + byteSizeOptimized + percentOptimized + isOptimized + percentDone + statusImage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/imageoptim/Base.lproj/PrefsController.strings b/imageoptim/Base.lproj/PrefsController.strings new file mode 100644 index 00000000..bed24127 --- /dev/null +++ b/imageoptim/Base.lproj/PrefsController.strings @@ -0,0 +1,69 @@ + +/* Window title */ +"5.title" = "ImageOptim Preferences"; + +/* The first prefs tab (misc/general) */ +"167.label" = "General"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimization speed"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Quality"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Writing files to disk"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Preserve file permissions, attributes and hardlinks"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimization level"; + +/* "Fast" */ +"819.title" = "Fast"; + +/* "Insane" */ +"820.title" = "Insane"; + +/* "Normal" */ +"821.title" = "Normal"; + +/* "Extra" */ +"822.title" = "Extra"; + +/* Checkbox in Preferences */ +"854.title" = "Strip PNG metadata (gamma, color profiles, optional chunks)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Web browsers require gamma chunks to be removed"; + +/* label "JPEG quality" */ +"868.title" = "JPEG quality"; + +/* Checkbox in Preferences */ +"911.title" = "Strip JPEG metadata (EXIF, color profiles, GPS, rotation, etc.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata and color profiles"; + +/* Header above list of tools to enable */ +"1107.title" = "Enable"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Saving to network drives is faster when permissions are not preserved"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Not recommended if you rely on embedded copyright information"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF quality"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Makes files much smaller, but may change how images look"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG quality"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Enable lossy minification"; diff --git a/imageoptim/Base.lproj/PrefsController.xib b/imageoptim/Base.lproj/PrefsController.xib new file mode 100644 index 00000000..f80fe731 --- /dev/null +++ b/imageoptim/Base.lproj/PrefsController.xib @@ -0,0 +1,1006 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + DisabledColor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/imageoptim/DragDropImageView.h b/imageoptim/DragDropImageView.h old mode 100755 new mode 100644 index 9fe22004..201c4916 --- a/imageoptim/DragDropImageView.h +++ b/imageoptim/DragDropImageView.h @@ -1,12 +1,15 @@ #import -#import +@import Cocoa; #import -@interface DragDropImageView : NSView -{ - BOOL highlight; //highlight the drop zone +#import "FilesController.h" + +@interface DragDropImageView : NSView { + BOOL highlight; // highlight the drop zone BOOL smoothSizes; // use blurry fractional sizes for smooth animation during live resize + + IBOutlet FilesController *filesController; } @end diff --git a/imageoptim/DragDropImageView.m b/imageoptim/DragDropImageView.m old mode 100755 new mode 100644 index 1b4de003..2c71b34b --- a/imageoptim/DragDropImageView.m +++ b/imageoptim/DragDropImageView.m @@ -1,65 +1,55 @@ /* - File: DragDropImageView.m + File: DragDropImageView.m - Contains: A sample to demonstrate Drag and Drop with Images in Cocoa + Contains: A sample to demonstrate Drag and Drop with Images in Cocoa */ #import "DragDropImageView.h" -#import "ImageOptim.h" -#import "FilesQueue.h" - +#import "ImageOptimController.h" +#import "FilesController.h" @implementation DragDropImageView - (void)awakeFromNib { - [self registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; - [self setAlphaValue:1.0]; -} - --(void)setHidden:(BOOL)flag { - if (!flag) [super setHidden:NO]; - [self.animator setAlphaValue:flag?0:1]; + [self registerForDraggedTypes:@[ NSFilenamesPboardType ]]; } --(BOOL)isHidden { - return [super isHidden] || self.alphaValue < 1.0f; +- (BOOL)allowsVibrancy { + return true; } --(NSView*)hitTest:(NSPoint)aPoint { - if ([self isHidden]) return nil; // just to make sure that hacked hidden property doesn't screw it up - return [super hitTest:aPoint]; +- (BOOL)isOpaque { + return false; } -//Destination Operations -- (NSDragOperation)draggingEntered:(id )sender -{ - highlight=YES; +// Destination Operations +- (NSDragOperation)draggingEntered:(id)sender { + highlight = YES; [self setNeedsDisplay:YES]; return NSDragOperationCopy; } -- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag -{ - return NSDragOperationCopy;//send data as copy operation +- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)flag { + return NSDragOperationCopy; // send data as copy operation } -- (void)draggingExited:(id )sender -{ - highlight=NO;//remove highlight of the drop zone - [self setNeedsDisplay: YES]; +- (void)draggingExited:(id)sender { + highlight = NO; // remove highlight of the drop zone + [self setNeedsDisplay:YES]; } --(void)viewWillStartLiveResize { +- (void)viewWillStartLiveResize { smoothSizes = YES; [super viewWillStartLiveResize]; } --(void)drawRect:(NSRect)rect -{ - [[NSColor windowBackgroundColor] setFill]; - NSRectFill(rect); +- (void)drawRect:(NSRect) _unused { + NSRect rect = self.bounds; + + [[NSColor clearColor] set]; + NSRectFillUsingOperation(rect, NSCompositeSourceOver); - NSColor *gray = [NSColor colorWithDeviceWhite:0 alpha:highlight ? 1.0/4.0 : 1.0/8.0]; + NSColor *gray = [[NSColor secondaryLabelColor] colorWithAlphaComponent:highlight ? 1.0/4.0 : 1.0/8.0]; [gray set]; [gray setFill]; @@ -71,13 +61,13 @@ -(void)drawRect:(NSRect)rect if (!smoothSizes) { width = round(width); size = ceil(size); - frame = NSMakeRect(round(frame.origin.x)+((int)width&1)/2.0, round(frame.origin.y)+((int)width&1)/2.0, round(frame.size.width), round(frame.size.height)); + frame = NSMakeRect(round(frame.origin.x) + ((int)width & 1) / 2.0, round(frame.origin.y) + ((int)width & 1) / 2.0, round(frame.size.width), round(frame.size.height)); } [NSBezierPath setDefaultLineWidth:width]; - NSBezierPath *p = [NSBezierPath bezierPathWithRoundedRect:frame xRadius:size/14.0 yRadius:size/14.0]; - const CGFloat dash[2] = {size/10.0, size/16.0}; + NSBezierPath *p = [NSBezierPath bezierPathWithRoundedRect:frame xRadius:size / 14.0 yRadius:size / 14.0]; + const CGFloat dash[2] = { size / 10.0, size / 16.0 }; [p setLineDash:dash count:2 phase:2]; [p stroke]; @@ -93,29 +83,22 @@ -(void)drawRect:(NSRect)rect [r fill]; } -- (BOOL)prepareForDragOperation:(id )sender -{ - highlight=NO;//finished with the drag so remove any highlighting - [self setNeedsDisplay: YES]; - return YES; +- (BOOL)prepareForDragOperation:(id)sender { + highlight = NO; // finished with the drag so remove any highlighting + [self setNeedsDisplay:YES]; + return YES; } -- (BOOL)performDragOperation:(id )sender -{ - if ([sender draggingSource]!=self){ - - ImageOptim *app = [NSApp delegate]; - assert([app isKindOfClass:[ImageOptim class]]); - FilesQueue* filesqueue=app.filesQueue; - NSArray *files = [[sender draggingPasteboard] propertyListForType:NSFilenamesPboardType]; - - [filesqueue performSelectorInBackground:@selector(addPaths:) withObject:files]; +- (BOOL)performDragOperation:(id)sender { + if ([sender draggingSource] != self) { + NSArray *files = [[sender draggingPasteboard] propertyListForType:NSFilenamesPboardType]; + [filesController performSelectorInBackground:@selector(addPaths:) withObject:files]; } return YES; } - (BOOL)acceptsFirstMouse:(NSEvent *)event { - return YES;//so source doesn't have to be the active window + return YES; // so source doesn't have to be the active window } @end diff --git a/imageoptim/FadeView.h b/imageoptim/FadeView.h new file mode 100755 index 00000000..8f339200 --- /dev/null +++ b/imageoptim/FadeView.h @@ -0,0 +1,10 @@ + +#import +@import Cocoa; +#import + +@interface FadeView : NSView +{ +} + +@end diff --git a/imageoptim/FadeView.m b/imageoptim/FadeView.m new file mode 100644 index 00000000..f1d846c1 --- /dev/null +++ b/imageoptim/FadeView.m @@ -0,0 +1,33 @@ + +#import "FadeView.h" + +@implementation FadeView + +- (void)awakeFromNib { + [self setAlphaValue:1.0]; +} + +- (BOOL)allowsVibrancy { + return false; +} + +- (void)setHidden:(BOOL)flag { + if (!flag) { + [super setHidden:NO]; + } + + [self.animator setAlphaValue:flag ? 0 : 1]; +} + +- (BOOL)isHidden { + return [super isHidden] || self.alphaValue < 1.0f; +} + +- (NSView *)hitTest:(NSPoint)aPoint { + if ([self isHidden]) { + return nil; // just to make sure that hacked hidden property doesn't screw it up + } + return [super hitTest:aPoint]; +} + +@end diff --git a/imageoptim/File.h b/imageoptim/File.h deleted file mode 100644 index e992b030..00000000 --- a/imageoptim/File.h +++ /dev/null @@ -1,75 +0,0 @@ -// -// File.h -// -// Created by porneL on 8.wrz.07. -// - -#import -#import "Workers/Worker.h" - -@class Dupe; - -@interface File : NSObject { - NSString *filePath; - NSString *displayName; - - NSUInteger byteSize; - NSUInteger byteSizeOptimized; - NSString *bestToolName; - double percentDone; - - NSString *filePathOptimized; - - NSImage *statusImage; - NSString *statusText; - NSInteger statusOrder; - - NSMutableArray *workers; - - NSUInteger workersActive; - NSUInteger workersFinished; - NSUInteger workersTotal; - - NSOperationQueue *fileIOQueue; - - BOOL done; -} - --(BOOL)isBusy; --(BOOL)isOptimized; --(BOOL)isDone; - --(void)enqueueWorkersInCPUQueue:(NSOperationQueue *)queue fileIOQueue:(NSOperationQueue *)fileIOQueue; - --(void)setFilePathOptimized:(NSString *)f size:(NSUInteger)s toolName:(NSString*)s; - --(id)initWithFilePath:(NSString *)name; --(id)copyWithZone:(NSZone *)zone; --(void)setByteSize:(NSUInteger)size; --(void)setByteSizeOptimized:(NSUInteger)size; --(BOOL)isOptimized; - - --(BOOL)isLarge; --(BOOL)isSmall; --(BOOL)isCameraPhoto; - --(void)setFilePath:(NSString *)s; - --(NSString *)fileName; - -@property (retain) NSString *statusText, *filePath, *displayName, *bestToolName; -@property (retain) NSImage *statusImage; -@property (assign,nonatomic) NSUInteger byteSize, byteSizeOptimized; -@property (assign,readonly) NSInteger statusOrder; - -@property (assign) double percentDone; - --(void)setStatus:(NSString *)name order:(NSInteger)order text:(NSString*)text; --(void)cleanup; - -+(NSInteger)fileByteSize:(NSString *)afile; - - --(void)doEnqueueWorkersInCPUQueue:(NSOperationQueue *)queue; -@end diff --git a/imageoptim/File.m b/imageoptim/File.m deleted file mode 100644 index 393889c2..00000000 --- a/imageoptim/File.m +++ /dev/null @@ -1,540 +0,0 @@ -// -// File.m -// -// Created by porneL on 8.wrz.07. -// - -#import "File.h" - -#import "Workers/AdvCompWorker.h" -#import "Workers/PngoutWorker.h" -#import "Workers/OptiPngWorker.h" -#import "Workers/PngCrushWorker.h" -#import "Workers/JpegoptimWorker.h" -#import "Workers/JpegtranWorker.h" -#import "Workers/GifsicleWorker.h" -//#import "Dupe.h" - -@implementation File - -@synthesize byteSize, byteSizeOptimized, filePath, displayName, statusText, statusOrder, statusImage, percentDone, bestToolName; - --(id)initWithFilePath:(NSString *)name; -{ - if (self = [self init]) - { - [self setFilePath:name]; - [self setStatus:@"wait" order:0 text:NSLocalizedString(@"New file",@"newly added to the queue")]; - } - return self; -} - --(BOOL)isCameraPhoto { - return byteSize > 1.3*1024*1024L; // Just a guess unfortunately. It's approx size of an iPhone 4 photo. -} - --(BOOL)isLarge { - return byteSize > 1*1024*1024; -} - --(BOOL)isSmall { - return byteSize < 2048; -} - --(NSString *)fileName -{ - if (displayName) return displayName; - if (filePath) return filePath; - return nil; -} - --(void)setFilePath:(NSString *)s -{ - if (filePath != s) - { - filePath = [s copy]; - - self.displayName = [[NSFileManager defaultManager] displayNameAtPath:filePath]; - } -} - -- (id)copyWithZone:(NSZone *)zone -{ - File *f = [[File allocWithZone:zone] init]; - [f setByteSize:byteSize]; - [f setByteSizeOptimized:byteSizeOptimized]; - [f setFilePath:filePath]; - return f; -} - --(void)setByteSize:(NSUInteger)size -{ - @synchronized(self) - { - if (!byteSize && size > 10) - { - byteSize = size; - if (!byteSizeOptimized || byteSizeOptimized > byteSize) [self setByteSizeOptimized:size]; - } - } -} - --(double)percentOptimized -{ - if (!byteSizeOptimized) return 0.0; - double p = 100.0 - 100.0* (double)byteSizeOptimized/(double)byteSize; - if (p<0) return 0.0; - return p; -} - --(void)setPercentOptimized:(double)unused -{ - // just for KVO -} - --(BOOL)isOptimized -{ - return byteSizeOptimized < byteSize; -} - --(BOOL)isDone -{ - return done; -} - --(void)setByteSizeOptimized:(NSUInteger)size -{ - @synchronized(self) - { - if ((!byteSizeOptimized || size < byteSizeOptimized) && size > 30) - { - // NSLog(@"We've got a new winner. old %d new %d",byteSizeOptimized,size); - byteSizeOptimized = size; - [self setPercentOptimized:0.0]; //just for KVO - } - } -} - --(void)removeOldFilePathOptimized -{ - if (filePathOptimized) - { - if ([filePathOptimized length]) - { - [[NSFileManager defaultManager] removeItemAtPath:filePathOptimized error:nil]; - } - filePathOptimized = nil; - } -} - --(void)setFilePathOptimized:(NSString *)path size:(NSUInteger)size toolName:(NSString*)toolname -{ - @synchronized(self) - { - NSLog(@"File %@ optimized with %@ from %u to %u in %@",filePath?filePath:filePathOptimized,toolname,(unsigned int)byteSizeOptimized,(unsigned int)size,path); - if (size < byteSizeOptimized) - { - self.bestToolName = [toolname stringByReplacingOccurrencesOfString:@"Worker" withString:@""]; - assert(![filePathOptimized isEqualToString:path]); - [self removeOldFilePathOptimized]; - filePathOptimized = path; - [self setByteSizeOptimized:size]; - } - } -} - --(BOOL)saveResult -{ - if (!filePathOptimized) - { - NSLog(@"WTF? save without filePathOptimized? for %@", filePath); - return NO; - } - - @try - { - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - BOOL preserve = [defs boolForKey:@"PreservePermissions"]; - BOOL backup = [defs boolForKey:@"BackupFiles"]; - NSFileManager *fm = [NSFileManager defaultManager]; - - if (backup) - { - NSError *error = nil; - NSString *backupPath = [filePath stringByAppendingString:@"~"]; - - [fm removeItemAtPath:backupPath error:nil];// ignore error - - BOOL res; - if (preserve) - { - res = [fm copyItemAtPath:filePath toPath:backupPath error:&error]; - } - else - { - res = [fm moveItemAtPath:filePath toPath:backupPath error:&error]; - } - - if (!res) - { - NSLog(@"failed to save backup as %@ (preserve = %d) %@",backupPath,preserve,error); - return NO; - } - } - - if (preserve) - { - NSFileHandle *writehandle = [NSFileHandle fileHandleForWritingAtPath:filePath]; - NSData *data = [NSData dataWithContentsOfFile:filePathOptimized]; - - if (!writehandle) { - NSLog(@"Unable to open %@ for writing. Check file permissions.", filePath); - return NO; - } - else if (!data) { - NSLog(@"Unable to read %@", filePathOptimized); - return NO; - } - else if ([data length] != byteSizeOptimized) { - NSLog(@"Temp file size %u does not match expected %u in %@ for %@",(unsigned int)[data length],(unsigned int)byteSizeOptimized,filePathOptimized,filePath); - return NO; - } - else if ([data length] <= 34) { - NSLog(@"File %@ is suspiciously small, could be truncated", filePathOptimized); - return NO; - } - else { - [writehandle writeData:data]; - [writehandle truncateFileAtOffset:[data length]]; - [writehandle closeFile]; - [self removeOldFilePathOptimized]; - } - } - else - { - NSError *error = nil; - if (!backup) {[fm removeItemAtPath:filePath error:nil];} //ignore error - - if ([fm moveItemAtPath:filePathOptimized toPath:filePath error:&error]) - { - filePathOptimized = nil; - } - else - { - NSLog(@"Failed to move from %@ to %@; %@",filePathOptimized, filePath, error); - return NO; - } - } - } - @catch(NSException *e) - { - NSLog(@"Exception thrown %@",e); - return NO; - } - - return YES; -} - --(void)workerHasStarted:(Worker *)worker -{ - @synchronized(self) - { - workersActive++; - NSString *name = [[worker className] stringByReplacingOccurrencesOfString:@"Worker" withString:@""]; - [self setStatus:@"progress" order:4 text:[NSString stringWithFormat:NSLocalizedString(@"Started %@",@"command name"),name]]; - } -} - --(void)saveResultAndUpdateStatus { - if ([self saveResult]) - { - done = YES; - [self setStatus:@"ok" order:7 text:[NSString stringWithFormat:NSLocalizedString(@"Optimized successfully with %@",@"tooltip"),bestToolName]]; - } - else - { - NSLog(@"saveResult failed"); - [self setStatus:@"err" order:9 text:NSLocalizedString(@"Optimized file could not be saved",@"tooltip")]; - } -} - --(void)workerHasFinished:(Worker *)worker -{ - @synchronized(self) - { - workersActive--; - workersFinished++; - - if (!workersActive) - { - if (!byteSize || !byteSizeOptimized) - { - NSLog(@"worker %@ finished, but result file has 0 size",worker); - [self setStatus:@"err" order:8 text:NSLocalizedString(@"Size of optimized file is 0",@"tooltip")]; - } - else if (workersFinished == workersTotal) - { - if (byteSize > byteSizeOptimized) - { - NSOperation *saveOp = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(saveResultAndUpdateStatus) object:nil]; - [workers addObject:saveOp]; - [fileIOQueue addOperation:saveOp]; - } - else - { - done = YES; - [self setStatus:@"noopt" order:5 text:NSLocalizedString(@"File cannot be optimized any further",@"tooltip")]; -// if (dupe) [Dupe addDupe:dupe]; - } - } - else - { - [self setStatus:@"wait" order:2 text:NSLocalizedString(@"Waiting to start more optimizations",@"tooltip")]; - } - } - } -} - -//-(void)checkDupe:(NSData *)data { -// Dupe *d = [[Dupe alloc] initWithData:data]; -// @synchronized(self) { -// dupe = d; -// } -// if ([Dupe isDupe:dupe]) -// { -// [self cleanup]; -// [self setStatus:@"noopt" text:@"File was already optimized by ImageOptim"]; -// } -// -//} - -#define FILETYPE_PNG 1 -#define FILETYPE_JPEG 2 -#define FILETYPE_GIF 3 - --(int)fileType:(NSData *)data -{ - const unsigned char pngheader[] = {0x89,0x50,0x4e,0x47,0x0d,0x0a}; - const unsigned char jpegheader[] = {0xff,0xd8,0xff}; - const unsigned char gifheader[] = {0x47,0x49,0x46,0x38}; - char filedata[6]; - - [data getBytes:filedata length:sizeof(filedata)]; - - if (0==memcmp(filedata, pngheader, sizeof(pngheader))) - { - return FILETYPE_PNG; - } - else if (0==memcmp(filedata, jpegheader, sizeof(jpegheader))) - { - return FILETYPE_JPEG; - } - else if (0==memcmp(filedata, gifheader, sizeof(gifheader))) - { - return FILETYPE_GIF; - } - return 0; -} - --(void)enqueueWorkersInCPUQueue:(NSOperationQueue *)queue fileIOQueue:(NSOperationQueue *)aFileIOQueue -{ - fileIOQueue = aFileIOQueue; // will be used for saving - - [self setStatus:@"wait" order:0 text:NSLocalizedString(@"Waiting in queue",@"tooltip")]; - - @synchronized(self) - { - workersActive++; // isBusy must say yes! - } - - workers = [[NSMutableArray alloc] initWithCapacity:10]; - - NSOperation *actualEnqueue = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doEnqueueWorkersInCPUQueue:) object:queue]; - if (queue.operationCount < queue.maxConcurrentOperationCount) { - actualEnqueue.queuePriority = NSOperationQueuePriorityHigh; - } - - [workers addObject:actualEnqueue]; - [fileIOQueue addOperation:actualEnqueue]; -} - --(void)doEnqueueWorkersInCPUQueue:(NSOperationQueue *)queue -{ - [self setStatus:@"progress" order:3 text:NSLocalizedString(@"Inspecting file",@"tooltip")]; - - @synchronized(self) - { - workersActive--; - byteSize=0; // reset to allow restart - byteSizeOptimized=0; - } - - - NSMutableArray *runFirst = [NSMutableArray new]; - NSMutableArray *runLater = [NSMutableArray new]; - - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - - NSData *fileData = [NSData dataWithContentsOfMappedFile:filePath]; - NSUInteger length = [fileData length]; - if (!fileData || !length) - { - [self setStatus:@"err" order:8 text:NSLocalizedString(@"Can't map file into memory",@"tooltip")]; - return; - } - [self setByteSize:length]; - - int fileType = [self fileType:fileData]; - - if (fileType == FILETYPE_PNG) - { - Worker *w = nil; - BOOL chunksRemoved=NO; - if ([defs boolForKey:@"PngCrushEnabled"]) - { - w = [[PngCrushWorker alloc] initWithFile:self]; - if ([w makesNonOptimizingModifications]) {chunksRemoved=YES;[runFirst addObject:w];} - else [runLater addObject:w]; - } - if ([defs boolForKey:@"OptiPngEnabled"]) - { - w = [[OptiPngWorker alloc] initWithFile:self]; - if ([w makesNonOptimizingModifications]) [runFirst addObject:w]; - else [runLater addObject:w]; - } - if ([defs boolForKey:@"PngOutEnabled"]) - { - w = [[PngoutWorker alloc] initWithFile:self]; - if (!chunksRemoved && [w makesNonOptimizingModifications]) [runFirst addObject:w]; - else [runLater addObject:w]; - } - if ([defs boolForKey:@"AdvPngEnabled"]) - { - w = [[AdvCompWorker alloc] initWithFile:self]; - if ([w makesNonOptimizingModifications]) [runFirst addObject:w]; - else [runLater addObject:w]; - } - } - else if (fileType == FILETYPE_JPEG) - { - if ([defs boolForKey:@"JpegOptimEnabled"]) - { - Worker *w = [[JpegoptimWorker alloc] initWithFile:self]; - if ([w makesNonOptimizingModifications]) [runFirst addObject:w]; - else [runLater addObject:w]; - } - if ([defs boolForKey:@"JpegTranEnabled"]) - { - Worker *w = [[JpegtranWorker alloc] initWithFile:self]; - [runLater addObject:w]; - } - } - else if (fileType == FILETYPE_GIF) - { - if ([defs boolForKey:@"GifsicleEnabled"]) - { - GifsicleWorker *w = [[GifsicleWorker alloc] initWithFile:self]; - w.interlace = NO; - [runLater addObject:w]; - - w = [[GifsicleWorker alloc] initWithFile:self]; - w.interlace = YES; - [runLater addObject:w]; - } - } - else { - [self setStatus:@"err" order:8 text:NSLocalizedString(@"File is neither PNG, GIF nor JPEG",@"tooltip")]; - //NSBeep(); - [self cleanup]; - return; - } - -// NSOperation *checkDupe = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(checkDupe:) object:fileData]; -// // largeish files are best to skip -// if (length > 10000) [checkDupe setQueuePriority:NSOperationQueuePriorityHigh]; -// else if (length < 3000) [checkDupe setQueuePriority:NSOperationQueuePriorityLow]; -// [workers addObject:checkDupe]; -// [fileIOQueue addOperation:checkDupe]; - - Worker *lastWorker = nil; - - workersTotal += [runFirst count] + [runLater count]; - - for(Worker *w in runFirst) - { - if (lastWorker) - { - [w addDependency:lastWorker]; - } - else { - [w setQueuePriority:NSOperationQueuePriorityLow]; // finish first! - } - [queue addOperation:w]; - lastWorker = w; - } - - lastWorker = [runFirst lastObject]; - for(Worker *w in runLater) - { - if (lastWorker) [w addDependency:lastWorker]; - [queue addOperation:w]; - } - - [workers addObjectsFromArray:runFirst]; - [workers addObjectsFromArray:runLater]; - - if (!workersTotal) - { - [self setStatus:@"err" order:8 text:NSLocalizedString(@"All neccessary tools have been disabled in Preferences",@"tooltip")]; - [self cleanup]; - } - else { - [self setStatus:@"wait" order:1 text:NSLocalizedString(@"Waiting to be optimized",@"tooltip")]; - } -} - --(void)cleanup -{ - @synchronized(self) - { - [workers makeObjectsPerformSelector:@selector(cancel)]; - [workers removeAllObjects]; - [self removeOldFilePathOptimized]; - } -} - --(BOOL)isBusy -{ - BOOL isit; - @synchronized(self) - { - isit = workersActive || workersTotal != workersFinished; - } - return isit; -} - --(void)setStatus:(NSString *)imageName order:(NSInteger)order text:(NSString *)text -{ - @synchronized(self) - { - if (statusText == text) return; - statusOrder = order; - self.statusText = text; - self.statusImage = [NSImage imageNamed:imageName]; - } -} - --(NSString *)description -{ - return [NSString stringWithFormat:@"%@ %ld/%ld (workers active %ld, finished %ld, total %ld)", self.filePath,(long)self.byteSize,(long)self.byteSizeOptimized, (long)workersActive, (long)workersFinished, (long)workersTotal]; -} - -+(NSInteger)fileByteSize:(NSString *)afile -{ - NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:afile error:nil]; - if (attr) return [[attr objectForKey:NSFileSize] integerValue]; - NSLog(@"Could not stat %@",afile); - return 0; -} - -@end diff --git a/imageoptim/FilesController.h b/imageoptim/FilesController.h new file mode 100644 index 00000000..368da416 --- /dev/null +++ b/imageoptim/FilesController.h @@ -0,0 +1,43 @@ +// +// FilesController.h +// +// Created by porneL on 23.wrz.07. +// + +@import Cocoa; + +@class File, ResultsDb, JobProxy; +extern NSString *const kJobQueueFinished; + +@interface FilesController : NSArrayController + +- (void)configureWithTableView:(NSTableView *)a; + +- (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)aTableColumn row:(int)row mouseLocation:(NSPoint)mouseLocation; +- (void)addURLsBelowSelection:(NSArray *)paths; +- (BOOL)addURLs:(NSArray *)paths; +- (BOOL)addPaths:(NSArray *)paths; +- (BOOL)addURLs:(NSArray *)paths filesOnly:(BOOL)t; + +- (void)moveObjectsInArrangedObjectsFromIndexes:(NSIndexSet *)indexSet + toIndex:(NSUInteger)insertIndex; +- (NSUInteger)rowsAboveRow:(NSUInteger)row inIndexSet:(NSIndexSet *)indexSet; +- (NSUInteger)numberOfRowsInTableView:(NSTableView *)tableview; + +- (void)startAgainOptimized:(BOOL)optimized; +- (BOOL)canStartAgainOptimized:(BOOL)optimized; +- (void)clearComplete; +@property (readonly) BOOL canClearComplete; +- (void)revert; +@property (readonly) BOOL canRevert; +- (void)cleanup; +- (void)setRow:(NSInteger)row; + +- (void)stopSelected; +- (void)updateStoppableState; +- (NSNumber *)queueCount; + +@property (readonly, copy) NSArray *fileTypes; +@property (readonly) BOOL isBusy, isStoppable; + +@end diff --git a/imageoptim/FilesController.m b/imageoptim/FilesController.m new file mode 100644 index 00000000..79bd63c2 --- /dev/null +++ b/imageoptim/FilesController.m @@ -0,0 +1,532 @@ +// +// FilesController.m +// +// Created by porneL on 23.wrz.07. +// +#import "Backend/Job.h" +#import "FilesController.h" +#import "log.h" +#import "Backend/DirScanner.h" +#import "RevealButtonCell.h" +#import "ResultsDb.h" +#import "JobQueue.h" +#import "JobProxy.h" + +@interface FilesController () + +@property (readonly, copy) NSArray *extensions; +@property (assign) BOOL isStoppable; +- (void)updateBusyState; +@end + +NSString *const kJobQueueFinished = @"JobQueueFinished"; +static NSString *kIMDraggedRowIndexesPboardType = @"com.imageoptim.rows"; + +@implementation FilesController { + JobQueue *jobQueue; + NSLock *queueWaitingLock; + + NSTableView *tableView; + BOOL isEnabled, isBusy, isStoppable; + NSInteger nextInsertRow; + + NSHashTable *seenPathHashes; + ResultsDb *db; +} + +@synthesize isBusy, isStoppable; + +- (void)configureWithTableView:(NSTableView *)inTableView { + tableView = inTableView; + seenPathHashes = [NSHashTable weakObjectsHashTable]; + db = [ResultsDb new]; + + queueWaitingLock = [NSLock new]; + + NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; + + jobQueue = [[JobQueue alloc] initWithCPUs:[defs integerForKey:@"RunConcurrentFiles"] + dirs:[defs integerForKey:@"RunConcurrentDirscans"] + files:[defs integerForKey:@"RunConcurrentFileops"] + defaults:defs]; + + [jobQueue addObserver:self forKeyPath:@"isBusy" options:0 context:NULL]; + + [tableView registerForDraggedTypes:@[ NSFilenamesPboardType, kIMDraggedRowIndexesPboardType ]]; + + [self setSelectsInsertedObjects:NO]; + + isEnabled = YES; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + if ([keyPath isEqualToString:@"isBusy"]) { + [self updateBusyState]; + } +} + +- (void)setRow:(NSInteger)row { + nextInsertRow = row; +} + +- (void)cleanup { + isEnabled = NO; + + [jobQueue cleanup]; + + NSArray *content = [self content]; + [content makeObjectsPerformSelector:@selector(cleanup)]; +} + +- (NSDragOperation)tableView:(NSTableView *)atableView + validateDrop:(id)info + proposedRow:(NSInteger)row + proposedDropOperation:(NSTableViewDropOperation)operation { + if (!isEnabled) { + return NSDragOperationNone; + } + + NSDragOperation dragOp = ([info draggingSource] == tableView) ? NSDragOperationMove : NSDragOperationCopy; + [atableView setDropRow:row dropOperation:NSTableViewDropAbove]; + + return dragOp; +} + +- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard { + if (!isEnabled) return NO; + + NSArray *fileUrls = [[[self arrangedObjects] objectsAtIndexes:rowIndexes] valueForKey:@"filePath"]; + + NSUInteger count = [fileUrls count]; + if (count) { + NSArray *types = @[ NSFilenamesPboardType, kIMDraggedRowIndexesPboardType ]; + if (count == 1) { + types = [types arrayByAddingObject:NSURLPboardType]; + } + [pboard declareTypes:types owner:nil]; + if (count == 1) { + [[fileUrls firstObject] writeToPasteboard:pboard]; + } + return [pboard setPropertyList:[fileUrls valueForKey:@"path"] forType:NSFilenamesPboardType] && + [pboard setData:[NSKeyedArchiver archivedDataWithRootObject:rowIndexes] + forType:kIMDraggedRowIndexesPboardType]; + } + return NO; +} + +- (void)removeObjects:(NSArray *)objects { + [super removeObjects:objects]; + [objects makeObjectsPerformSelector:@selector(cleanup)]; +} + +- (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)aTableColumn row:(int)row mouseLocation:(NSPoint)mouseLocation { + NSArray *objs = [self arrangedObjects]; + if (row < (signed)[objs count]) { + JobProxy *f = objs[row]; + assert([f isKindOfClass:[JobProxy class]]); + + if ([aCell isKindOfClass:[RevealButtonCell class]]) { + NSRect infoButtonRect = [((RevealButtonCell *)aCell) infoButtonRectForBounds:*rect]; + + BOOL mouseIsInside = NSMouseInRect(mouseLocation, infoButtonRect, [aTableView isFlipped]); + if (mouseIsInside) { + return f.filePath.path; + } + } + + return [f statusText]; + } + return nil; +} + +// Better in NSArrayController class +- (NSUInteger)rowsAboveRow:(NSUInteger)row inIndexSet:(NSIndexSet *)indexSet { + NSUInteger currentIndex = [indexSet firstIndex]; + NSUInteger i = 0; + while (currentIndex != NSNotFound) { + if (currentIndex < row) { + i++; + } + currentIndex = [indexSet indexGreaterThanIndex:currentIndex]; + } + return i; +} +- (NSUInteger)numberOfRowsInTableView:(NSTableView *)tableview { + return [[self arrangedObjects] count]; +} + +- (void)moveObjectsInArrangedObjectsFromIndexes:(NSIndexSet *)indexSet + toIndex:(NSUInteger)insertIndex { + NSArray *objects = [self arrangedObjects]; + NSUInteger idx = [indexSet lastIndex]; + + NSUInteger aboveInsertIndexCount = 0; + id object; + NSUInteger removeIndex; + + while (NSNotFound != idx) { + if (idx >= insertIndex) { + removeIndex = idx + aboveInsertIndexCount; + aboveInsertIndexCount += 1; + } else { + removeIndex = idx; + insertIndex -= 1; + } + object = objects[removeIndex]; + [self removeObjectAtArrangedObjectIndex:removeIndex]; + [self insertObject:object atArrangedObjectIndex:insertIndex]; + + idx = [indexSet indexLessThanIndex:idx]; + } +} + +- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation { + NSPasteboard *pboard = [info draggingPasteboard]; + NSData *indexesArchived; + + if ([info draggingSource] == aTableView && (indexesArchived = [pboard dataForType:kIMDraggedRowIndexesPboardType])) { + NSIndexSet *indexSet = [NSKeyedUnarchiver unarchiveObjectWithData:indexesArchived]; + + NSIndexSet *selection = [self selectionIndexes]; + BOOL containsSelection = [selection containsIndexes:indexSet]; + + [self moveObjectsInArrangedObjectsFromIndexes:indexSet toIndex:row]; + + if (containsSelection) { + NSUInteger rowsAbove = [self rowsAboveRow:row inIndexSet:indexSet]; + + NSRange range = NSMakeRange(row - rowsAbove, [indexSet count]); + indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; + [self setSelectionIndexes:indexSet]; + } else if (![selection count]) { + // non-empty selection seems to be preserved, but if there was no selection + // then tableview selects a row + [self setSelectedObjects:@[]]; + } + + return YES; + } else { + NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType]; + nextInsertRow = row; + [self performSelectorInBackground:@selector(addPaths:) withObject:paths]; + } + + [[aTableView window] makeKeyAndOrderFront:aTableView]; + + return YES; +} + +/** selfLock must be locked before using this + That's a dumb linear search. Would be nice to replace NSArray with NSSet or NSHashTable. + */ +- (JobProxy *)findFileByPath:(NSURL *)path { + if (![seenPathHashes containsObject:path]) { + return nil; + } + + NSString *pathString = path.path; + for (JobProxy *f in [self content]) { + assert([f isKindOfClass:[JobProxy class]]); + if ([pathString isEqualToString:f.filePath.path]) { + return f; + } + } + return nil; +} + +- (void)addJobObjects:(NSArray *)files { + [[tableView undoManager] registerUndoWithTarget:self selector:@selector(removeObjects:) object:files]; + [[tableView undoManager] setActionName:NSLocalizedString(@"Add", @"undo command name")]; + + @synchronized(self) { + if (nextInsertRow < 0 || nextInsertRow >= [[self arrangedObjects] count]) { + [self addObjects:files]; + } else { + NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(nextInsertRow, [files count])]; + [self insertObjects:files atArrangedObjectIndexes:set]; + nextInsertRow += [files count]; + } + } +} + +- (void)addURLsBelowSelection:(NSArray *)paths { + nextInsertRow = [self selectionIndex]; + [self performSelectorInBackground:@selector(addURLs:) withObject:paths]; +} + +- (BOOL)addPaths:(NSArray *)paths { + NSMutableArray *urls = [NSMutableArray arrayWithCapacity:[paths count]]; + for (NSString *path in paths) { + [urls addObject:[NSURL fileURLWithPath:path]]; + } + + return [self addURLs:urls filesOnly:NO]; +} + +- (BOOL)addURLs:(NSArray *)paths { + return [self addURLs:paths filesOnly:NO]; +} + +/** filesOnly indicates that paths do not contain any directories or symlinks */ +- (BOOL)addURLs:(NSArray *)paths filesOnly:(BOOL)filesOnly { + if (!isEnabled || !paths) { + return NO; + } + if (![paths isKindOfClass:[NSArray class]]) { + IOWarn("bad paths obj %@", paths); + return NO; + } + + NSMutableArray *toAdd = [NSMutableArray arrayWithCapacity:[paths count]]; + + BOOL allOK = YES; + NSFileManager *fm = filesOnly ? nil : [NSFileManager defaultManager]; + + for (NSURL *relpath in paths) { + NSURL *path; + BOOL isDir = NO; + + if (!fm) { + path = relpath; + } else { + path = [relpath URLByResolvingSymlinksInPath]; + + if (![fm fileExistsAtPath:path.path isDirectory:&isDir]) { + IOWarn("%@ doesn't exist", path.path); + allOK = NO; + continue; + } + } + + if (!isDir) { + JobProxy *old = [self findFileByPath:path]; + if (old) { + if (![old isBusy]) { + [jobQueue addJob:old.job]; + } + } else { + [seenPathHashes addObject:path]; // used by findFileByPath + Job *f = [[Job alloc] initWithFilePath:path resultsDatabase:db]; + JobProxy *jobProxy = [[JobProxy alloc] initWithJob:f]; + [toAdd addObject:jobProxy]; + [jobQueue addJob:f]; + } + } else { + DirScanner *w = [[DirScanner alloc] initWithPath:path filesController:self extensions:[self extensions]]; + [jobQueue addDirScanner:w]; + } + } + + [self performSelectorOnMainThread:@selector(addJobObjects:) withObject:toAdd waitUntilDone:NO]; + + return allOK; +} + +- (NSNumber *)queueCount { + return [jobQueue queueCount]; +} + +- (void)stopSelected { + for (JobProxy *f in self.selectedObjects) { + [f stop]; + } + [self updateStoppableState]; +} + +- (void)revert { + BOOL beep = NO; + NSArray *array = [self selectedObjects]; + for (JobProxy *f in array) { + if (![f revert]) { + beep = YES; + } + } + if (beep) { + NSBeep(); + } +} + +- (BOOL)canRevert { + NSArray *array = [self selectedObjects]; + for (JobProxy *f in array) { + if ([f canRevert]) { + return YES; + } + } + return NO; +} + +- (BOOL)canClearComplete { + for (JobProxy *f in [self arrangedObjects]) { + if (f.isDone) { + return YES; + } + } + return NO; +} + +- (void)clearComplete { + NSUInteger i = 0; + NSMutableIndexSet *set = [NSMutableIndexSet new]; + + @synchronized(self) { + for (JobProxy *f in [self arrangedObjects]) { + if (f.isDone) { + [set addIndex:i]; + } + i++; + } + if ([set count]) { + [self removeObjectsAtArrangedObjectIndexes:set]; + } + } + [self setRow:-1]; +} + +- (BOOL)canStartAgainOptimized:(BOOL)optimized { + NSArray *array = [self selectedObjects]; + if (![array count]) { + array = [self content]; + } + + for (JobProxy *f in array) { + if (!f.isBusy && (!optimized || f.isOptimized)) { + return YES; + } + } + return NO; +} + +- (void)startAgainOptimized:(BOOL)optimized { + BOOL anyStarted = NO; + @synchronized(self) { + NSArray *jobs = [self selectedObjects]; + NSInteger selectionCount = [jobs count]; + + // UI doesn't give a way to deselect all, so here's a substitute + // when selecting "again" on file that doesn't need it, deselect + if (1 == selectionCount) { + JobProxy *job = jobs[0]; + if (job.isBusy || !job.isOptimized) { + jobs = [jobs copy]; + [self setSelectedObjects:@[]]; + } + } else if (!selectionCount) { + jobs = [self content]; + } + + for (JobProxy *f in jobs) { + if (!f.isBusy && (!optimized || f.isOptimized)) { + [jobQueue addJob:f.job]; + anyStarted = YES; + } + } + } + + if (!anyStarted) NSBeep(); +} + +- (void)updateBusyState { + BOOL currentlyBusy = [jobQueue isBusy]; + + if (isBusy != currentlyBusy) { + [self willChangeValueForKey:@"isBusy"]; + isBusy = currentlyBusy; + [self didChangeValueForKey:@"isBusy"]; + + [self updateStoppableState]; + } + + if (!currentlyBusy) { + [[NSNotificationCenter defaultCenter] postNotificationName:kJobQueueFinished object:self]; + } +} + +- (void)updateStoppableState { + if (isBusy) { + NSArray *array = [self selectedObjects]; + for (JobProxy *f in array) { + if ([f isStoppable]) { + self.isStoppable = YES; + return; + } + } + } + self.isStoppable = NO; +} + +#define PNG_ENABLED 1 +#define JPEG_ENABLED 2 +#define GIF_ENABLED 4 +#define SVG_ENABLED 8 + +- (int)typesEnabled { + int types = 0; + NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; + + if ([defs boolForKey:@"PngCrush2Enabled"] || [defs boolForKey:@"PngOutEnabled"] || + [defs boolForKey:@"OptiPngEnabled"] || [defs boolForKey:@"AdvPngEnabled"] || [defs boolForKey:@"ZopfliEnabled"]) { + types |= PNG_ENABLED; + } + + if ([defs boolForKey:@"JpegOptimEnabled"] || [defs boolForKey:@"JpegTranEnabled"]) { + types |= JPEG_ENABLED; + } + + if ([defs boolForKey:@"GifsicleEnabled"]) { + types |= GIF_ENABLED; + } + + if ([defs boolForKey:@"SvgoEnabled"] || [defs boolForKey:@"SvgcleanerEnabled"]) { + types |= SVG_ENABLED; + } + + if (!types) types = PNG_ENABLED; // will show error in the list + return types; +} + +- (NSArray *)extensions { + int types = [self typesEnabled]; + NSMutableArray *extensions = [NSMutableArray array]; + + if (types & PNG_ENABLED) { + [extensions addObject:@"png"]; + [extensions addObject:@"PNG"]; + } + if (types & JPEG_ENABLED) { + [extensions addObjectsFromArray:@[ @"jpg", @"JPG", @"jpeg", @"JPEG" ]]; + } + if (types & GIF_ENABLED) { + [extensions addObject:@"gif"]; + [extensions addObject:@"GIF"]; + } + if (types & SVG_ENABLED) { + [extensions addObject:@"svg"]; + } + + return extensions; +} + +- (NSArray *)fileTypes { + int types = [self typesEnabled]; + + NSMutableArray *fileTypes = [NSMutableArray array]; + + if (types & PNG_ENABLED) { + [fileTypes addObjectsFromArray:@[ @"png", @"PNG", NSFileTypeForHFSTypeCode('PNGf'), @"public.png", @"image/png" ]]; + } + if (types & JPEG_ENABLED) { + [fileTypes addObjectsFromArray:@[ @"jpg", @"jpeg", @"JPG", @"JPEG", NSFileTypeForHFSTypeCode('JPEG'), @"public.jpeg", @"image/jpeg" ]]; + } + if (types & GIF_ENABLED) { + [fileTypes addObjectsFromArray:@[ @"gif", @"GIF", NSFileTypeForHFSTypeCode('GIFf'), @"public.gif", @"image/gif" ]]; + } + if (types & SVG_ENABLED) { + [fileTypes addObjectsFromArray:@[ @"svg", @"public.svg-image", @"image/svg" ]]; + } + return fileTypes; +} + +@end diff --git a/imageoptim/FilesQueue.h b/imageoptim/FilesQueue.h deleted file mode 100644 index aaf26302..00000000 --- a/imageoptim/FilesQueue.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// FilesQueue.h -// -// Created by porneL on 23.wrz.07. -// - -#import -#import - -@class File; - -@interface FilesQueue : NSObject { - NSTableView *tableView; - NSArrayController *filesController; - BOOL isEnabled; - NSInteger nextInsertRow; - NSOperationQueue *cpuQueue; - NSOperationQueue *fileIOQueue; - NSOperationQueue *dirWorkerQueue; - - NSRecursiveLock *filesControllerLock; - - NSHashTable *seenPathHashes; - - NSProgressIndicator *progressBar; - - NSLock *queueWaitingLock; -} - --(id)initWithTableView:(NSTableView*)a progressBar:(NSProgressIndicator *)p andController:(NSArrayController*)b; -- (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)aTableColumn row:(int)row mouseLocation:(NSPoint)mouseLocation; --(void)addPaths:(NSArray *)paths; --(void)addFilePaths:(NSArray *)paths; --(void)addPath:(NSString*)s; - --(void) moveObjectsInArrangedObjectsFromIndexes:(NSIndexSet*)indexSet - toIndex:(NSUInteger)insertIndex; -- (NSUInteger)rowsAboveRow:(NSUInteger)row inIndexSet:(NSIndexSet *)indexSet; -- (NSUInteger)numberOfRowsInTableView:(NSTableView *)tableview; - --(void)runAdded; --(void)startAgainOptimized:(BOOL)optimized; --(BOOL)canStartAgainOptimized:(BOOL)optimized; --(void)clearComplete; --(BOOL)canClearComplete; --(IBAction)delete:(id)sender; --(void)quickLook; --(BOOL)copyObjects; --(void)cutObjects; --(void)pasteObjects; --(void)cleanup; --(void)setRow:(NSInteger)row; --(void)openRowInFinder:(NSInteger)row withPreview:(BOOL)preview; - --(NSArray *)fileTypes; -@end diff --git a/imageoptim/FilesQueue.m b/imageoptim/FilesQueue.m deleted file mode 100644 index 1ad265ad..00000000 --- a/imageoptim/FilesQueue.m +++ /dev/null @@ -1,629 +0,0 @@ -// -// FilesQueue.m -// -// Created by porneL on 23.wrz.07. -// -#import "File.h" -#import "FilesQueue.h" - -#import "Workers/DirWorker.h" - -@interface FilesQueue () - --(NSArray*)extensions; --(BOOL)isAnyQueueBusy; --(void)setEnabled:(BOOL)y; --(void)updateProgressbar; --(NSArray*)selectedFilePaths; --(void)deleteObjects:(NSArray*)objects; -@end - - -@implementation FilesQueue - --(id)initWithTableView:(NSTableView*)inTableView progressBar:(NSProgressIndicator *)inBar andController:(NSArrayController*)inController -{ - if (self = [super init]) { - progressBar = inBar; - filesController = inController; - tableView = inTableView; - seenPathHashes = [[NSHashTable alloc] initWithOptions:NSHashTableZeroingWeakMemory capacity:1000]; - - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - - cpuQueue = [NSOperationQueue new]; - [cpuQueue setMaxConcurrentOperationCount:[defs integerForKey:@"RunConcurrentTasks"]]; - - dirWorkerQueue = [NSOperationQueue new]; - [dirWorkerQueue setMaxConcurrentOperationCount:[defs integerForKey:@"RunConcurrentDirscans"]]; - - fileIOQueue = [NSOperationQueue new]; - NSUInteger fileops = [defs integerForKey:@"RunConcurrentFileops"]; - [fileIOQueue setMaxConcurrentOperationCount:fileops?fileops:2]; - - queueWaitingLock = [NSLock new]; - - [tableView setDelegate:self]; - [tableView setDataSource:self]; - [tableView registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; - - [self setEnabled:YES]; - } - return self; -} - - --(BOOL)isAnyQueueBusy -{ - if ([dirWorkerQueue respondsToSelector:@selector(operationCount)]) - { - assert(NSFoundationVersionNumber >= (1.0+kCFCoreFoundationVersionNumber10_5)); - return dirWorkerQueue.operationCount || fileIOQueue.operationCount || cpuQueue.operationCount; - } - else - { - assert(NSFoundationVersionNumber < (1.0+kCFCoreFoundationVersionNumber10_5)); - return dirWorkerQueue.operations.count || fileIOQueue.operations.count || cpuQueue.operations.count; - } -} - --(void)waitForQueuesToFinish { - - if ([queueWaitingLock tryLock]) - { - @try{ - do { // any queue may be re-filled while waiting for another queue, so double-check is necessary - [dirWorkerQueue waitUntilAllOperationsAreFinished]; - [fileIOQueue waitUntilAllOperationsAreFinished]; - [cpuQueue waitUntilAllOperationsAreFinished]; - - } while ([self isAnyQueueBusy]); - } - @finally { - [queueWaitingLock unlock]; - } - } - [self performSelectorOnMainThread:@selector(updateProgressbar) withObject:nil waitUntilDone:NO]; -} - --(void)waitInBackgroundForQueuesToFinish { - if ([queueWaitingLock tryLock]) // if it's locked, there's thread waiting for finish - { - [queueWaitingLock unlock]; // can't lock/unlock across threads, so new lock will have to be made - [self performSelectorInBackground:@selector(waitForQueuesToFinish) withObject:nil]; - } -} - --(void)setEnabled:(BOOL)y; -{ - isEnabled = y; - [tableView setEnabled:y]; -} - --(BOOL)enabled -{ - return isEnabled; -} - --(void)setRow:(NSInteger)row -{ - nextInsertRow=row; -} - --(void)cleanup { - isEnabled = NO; - [dirWorkerQueue cancelAllOperations]; - [fileIOQueue cancelAllOperations]; - [cpuQueue cancelAllOperations]; - for(File *f in [filesController content]) - { - [f cleanup]; - } -} - -- (NSDragOperation)tableView:(NSTableView *)atableView - validateDrop:(id )info - proposedRow:(NSInteger)row - proposedDropOperation:(NSTableViewDropOperation)operation -{ - if (!isEnabled) return NSDragOperationNone; - - [filesControllerLock lock]; - - NSDragOperation dragOp = ([info draggingSource] == tableView) ? NSDragOperationMove : NSDragOperationCopy; - nextInsertRow=row; - - [atableView setDropRow:row dropOperation:NSTableViewDropAbove]; - - [filesControllerLock unlock]; - return dragOp; -} - --(void)pasteObjects{ - - NSPasteboard *pboard = [NSPasteboard generalPasteboard]; - NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType]; - [filesControllerLock lock]; - [self performSelectorInBackground:@selector(addPaths:) withObject:paths]; - - [filesControllerLock unlock]; -} - -- (BOOL)tableView:(NSTableView *)tv - writeRows:(NSArray*)rows - toPasteboard:(NSPasteboard*)pboard -{ - if (!isEnabled) return NO; - NSArray *filePathlist=[self selectedFilePaths]; - NSArray *typesArray=[NSArray arrayWithObject:NSFilenamesPboardType]; - - if ([filePathlist count]>0) - { - [pboard declareTypes:typesArray owner:self]; - if([pboard setPropertyList:filePathlist forType:NSFilenamesPboardType]) - return YES; - - } - return NO; -} - --(BOOL)copyObjects -{ - if (!isEnabled) return NO; - NSPasteboard *pboard=[NSPasteboard generalPasteboard]; - NSArray *filePathlist=[self selectedFilePaths]; - - NSArray *typesArray=[NSArray arrayWithObject:NSFilenamesPboardType]; - - if ([filePathlist count]>0) - { - [pboard declareTypes:typesArray owner:self]; - if([pboard setPropertyList:filePathlist forType:NSFilenamesPboardType]) - return YES; - - } - return NO; -} - --(NSArray*)selectedFilePaths -{ - NSArray *selectedFiles=[filesController selectedObjects]; - NSEnumerator *fileEnum=[selectedFiles objectEnumerator]; - NSMutableArray *filePathlist=[NSMutableArray array]; - - id afile; - while (afile=[fileEnum nextObject]) { - [filePathlist addObject:[afile valueForKey:@"filePath"]]; - } - return filePathlist; -} - - --(void)cutObjects - { - if ([self copyObjects]){ - [self deleteObjects:[filesController selectedObjects]]; - [[tableView undoManager] setActionName:NSLocalizedString(@"Cut",nil)]; - } -} - - --(IBAction)delete:(id)sender -{ - NSArray *files = nil; - [filesControllerLock lock]; - - if ([filesController canRemove]) - { - - files = [filesController selectedObjects]; - - [self deleteObjects:files]; - } - - if (files) - { - for(File *f in files) - { - [f cleanup]; - } - } - else NSBeep(); - [filesControllerLock unlock]; - [self runAdded]; -} --(void)addObjects:(NSArray*)objects -{ - NSUndoManager *undo=[tableView undoManager]; - [undo registerUndoWithTarget:self selector:@selector(deleteObjects:) object:objects]; - [filesController addObjects:objects]; -} - --(void)deleteObjects:(NSArray*)objects -{ - NSUndoManager *undo=[tableView undoManager]; - [undo registerUndoWithTarget:self selector:@selector(addObjects:) object:objects]; - [filesController removeObjects:objects]; -} - -- (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)aTableColumn row:(int)row mouseLocation:(NSPoint)mouseLocation -{ - NSArray *objs = [filesController arrangedObjects]; - if (row < (signed)[objs count]) - { - File *f = [objs objectAtIndex:row]; - return [f statusText]; - } - return nil; -} - --(void)openRowInFinder:(NSInteger)row withPreview:(BOOL)preview { - NSArray *files = [filesController arrangedObjects]; - if (row < [files count]) { - File *f = [files objectAtIndex:row]; - if (preview) [[NSWorkspace sharedWorkspace] openFile:[f filePath]]; - else [[NSWorkspace sharedWorkspace] selectFile:[f filePath] inFileViewerRootedAtPath:@""]; - } -} - -// Better in NSArrayController class -- (NSUInteger)rowsAboveRow:(NSUInteger)row inIndexSet:(NSIndexSet *)indexSet -{ - NSUInteger currentIndex = [indexSet firstIndex]; - NSUInteger i = 0; - while (currentIndex != NSNotFound) - { - if (currentIndex < row) { i++; } - currentIndex = [indexSet indexGreaterThanIndex:currentIndex]; - } - return i; -} -- (NSUInteger)numberOfRowsInTableView:(NSTableView *)tableview -{ - return [[filesController arrangedObjects] count]; -} - --(void) moveObjectsInArrangedObjectsFromIndexes:(NSIndexSet*)indexSet - toIndex:(NSUInteger)insertIndex -{ - - NSArray *objects = [filesController arrangedObjects]; - NSUInteger idx = [indexSet lastIndex]; - - NSUInteger aboveInsertIndexCount = 0; - id object; - NSUInteger removeIndex; - - while (NSNotFound != idx) - { - if (idx >= insertIndex) { - removeIndex = idx + aboveInsertIndexCount; - aboveInsertIndexCount += 1; - } - else - { - removeIndex = idx; - insertIndex -= 1; - } - object = [objects objectAtIndex:removeIndex]; - [filesController removeObjectAtArrangedObjectIndex:removeIndex]; - [filesController insertObject:object atArrangedObjectIndex:insertIndex]; - - idx = [indexSet indexLessThanIndex:idx]; - } -} - - -- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id )info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation -{ - - NSPasteboard *pboard = [info draggingPasteboard]; - NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType]; - - if ([info draggingSource] == tableView){ - - NSIndexSet *indexSet = [filesController selectionIndexes];//[self indexSetFromRows:paths]; - - [self moveObjectsInArrangedObjectsFromIndexes:indexSet toIndex:row]; - NSUInteger rowsAbove = [self rowsAboveRow:row inIndexSet:indexSet]; - - NSRange range = NSMakeRange(row - rowsAbove, [indexSet count]); - indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; - [filesController setSelectionIndexes:indexSet]; - return YES; - - }else [self performSelectorInBackground:@selector(addPaths:) withObject:paths]; - - [[aTableView window] makeKeyAndOrderFront:aTableView]; - - return YES; -} - --(void)addDir:(NSString *)path -{ - if (!isEnabled) return; - - @try { - DirWorker *w = [[DirWorker alloc] initWithPath:path filesQueue:self extensions:[self extensions]]; - [dirWorkerQueue addOperation:w]; - } - @catch (NSException *e) { - NSLog(@"Add dir failed %@",e); - } - - [self runAdded]; -} - -/** filesControllerLock must be locked before using this - That's a dumb linear search. Would be nice to replace NSArray with NSSet or NSHashTable. - */ --(File *)findFileByPath:(NSString *)path -{ - if (![seenPathHashes containsObject:path]) - { - return nil; - } - - for(File *f in [filesController content]) - { - if ([path isEqualToString:[f filePath]]) - { - return f; - } - } - return nil; -} - --(void)addFileObjects:(NSArray *)files -{ - if (nextInsertRow < 0 || nextInsertRow >= [[filesController arrangedObjects] count]) { - [filesController addObjects:files]; - } else { - NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(nextInsertRow, [files count])]; - [filesController insertObjects:files atArrangedObjectIndexes:set]; - nextInsertRow += [files count]; - } - - for(File *f in files) { - [f enqueueWorkersInCPUQueue:cpuQueue fileIOQueue:fileIOQueue]; - } - - [self runAdded]; -} - --(void)addFilePaths:(NSArray*)paths -{ - NSMutableArray *toAdd = [NSMutableArray arrayWithCapacity:[paths count]]; - BOOL beepWhenDone = NO; - - [filesControllerLock lock]; - @try { - for(NSString *path in paths) - { - if ([path characterAtIndex:[path length]-1] == '~') // backup file - { - NSLog(@"Refusing to optimize backup file"); - beepWhenDone = YES; - continue; - } - - File *f = [self findFileByPath:path]; - if (f) - { - if (![f isBusy]) [f enqueueWorkersInCPUQueue:cpuQueue fileIOQueue:fileIOQueue];; - } - else - { - [seenPathHashes addObject:path]; // used by findFileByPath - f = [[File alloc] initWithFilePath:path]; - [toAdd addObject:f]; - } - } - - [self performSelectorOnMainThread:@selector(addFileObjects:) withObject:toAdd waitUntilDone:YES]; - } - @catch (NSException *e) { - NSLog(@"add file path failed %@",e); - } - @finally { - [filesControllerLock unlock]; - } - - if (beepWhenDone) NSBeep(); - [[tableView undoManager] registerUndoWithTarget:self selector:@selector(deleteObjects:) object:toAdd]; - [[tableView undoManager] setActionName:NSLocalizedString(@"Add",nil)]; -} - --(void)addPath:(NSString *)path -{ - if (!isEnabled) { - return; - } - - BOOL isDir; - if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) - { - if (!isDir) - { - [self performSelectorOnMainThread:@selector(addFilePaths:) withObject:[NSArray arrayWithObject:path] waitUntilDone:NO]; - } - else - { - [self addDir:path]; - } - } -} - --(void)runAdded -{ - [self updateProgressbar]; - [self waitInBackgroundForQueuesToFinish]; -} - --(BOOL)canClearComplete { - for(File *f in [filesController arrangedObjects]) { - if (f.isDone) return YES; - } - return NO; -} - --(void)clearComplete -{ - [filesControllerLock lock]; - NSUInteger i=0; - NSMutableIndexSet *set = [NSMutableIndexSet new]; - for(File *f in [filesController arrangedObjects]) { - if (f.isDone) [set addIndex:i]; - i++; - } - if ([set count]) { - [filesController removeObjectsAtArrangedObjectIndexes:set]; - [self setRow:-1]; - [tableView setNeedsDisplay:YES]; - } - [filesControllerLock unlock]; -} - --(BOOL)canStartAgainOptimized:(BOOL)optimized { - NSArray *array = [filesController selectedObjects]; - if (![array count]) array = [filesController content]; - - for(File *f in array) { - if (!f.isBusy && (!optimized || f.isOptimized)) return YES; - } - return NO; -} - --(void)startAgainOptimized:(BOOL)optimized -{ - BOOL anyStarted = NO; - [filesControllerLock lock]; - @try { - NSArray *array = [filesController selectedObjects]; - if (![array count]) array = [filesController content]; - - for(File *f in array) { - if (!f.isBusy && (!optimized || f.isOptimized)) { - [f enqueueWorkersInCPUQueue:cpuQueue fileIOQueue:fileIOQueue]; - anyStarted = YES; - } - } - } - @finally { - [filesControllerLock unlock]; - } - - if (!anyStarted) NSBeep(); - - [self runAdded]; -} - --(void)updateProgressbar -{ - if (![self isAnyQueueBusy]) - { - [progressBar stopAnimation:nil]; - [NSApp requestUserAttention:NSInformationalRequest]; - [tableView setNeedsDisplay:YES]; - } - else - { - [progressBar startAnimation:nil]; - [self waitInBackgroundForQueuesToFinish]; - } -} - --(void)addPaths:(NSArray *)paths -{ - for(NSString *path in paths) - { - [self addPath:path]; - } - - [self runAdded]; -} - --(void) quickLook -{ - if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]) { - [[QLPreviewPanel sharedPreviewPanel] orderOut:nil]; - } else { - [filesControllerLock lock]; - [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil]; - [filesControllerLock unlock]; - } -} - - -#define PNG_ENABLED 1 -#define JPEG_ENABLED 2 -#define GIF_ENABLED 4 - --(int)typesEnabled { - int types = 0; - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - - if ([defs boolForKey:@"PngCrushEnabled"] || [defs boolForKey:@"PngOutEnabled"] || - [defs boolForKey:@"OptiPngEnabled"] || [defs boolForKey:@"AdvPngEnabled"]) - { - types |= PNG_ENABLED; - } - - if ([defs boolForKey:@"JpegOptimEnabled"] || [defs boolForKey:@"JpegTranEnabled"]) - { - types |= JPEG_ENABLED; - } - - if ([defs boolForKey:@"GifsicleEnabled"]) - { - types |= GIF_ENABLED; - } - - if (!types) types = PNG_ENABLED; // will show error in the list - return types; -} - - --(NSArray*)extensions { - - int types = [self typesEnabled]; - NSMutableArray *extensions = [NSMutableArray array]; - - if (types & PNG_ENABLED) - { - [extensions addObject:@"png"]; [extensions addObject:@"PNG"]; - } - if (types & JPEG_ENABLED) - { - [extensions addObjectsFromArray:[NSArray arrayWithObjects:@"jpg",@"JPG",@"jpeg",@"JPEG",nil]]; - } - if (types & GIF_ENABLED) - { - [extensions addObject:@"gif"]; [extensions addObject:@"GIF"]; - } - - return extensions; -} - - --(NSArray *)fileTypes { - int types = [self typesEnabled]; - - NSMutableArray *fileTypes = [NSMutableArray array]; - - if (types & PNG_ENABLED) - { - [fileTypes addObjectsFromArray:[NSArray arrayWithObjects:@"png",@"PNG",NSFileTypeForHFSTypeCode( 'PNGf' ),@"public.png",@"image/png",nil]]; - } - if (types & JPEG_ENABLED) - { - [fileTypes addObjectsFromArray:[NSArray arrayWithObjects:@"jpg",@"jpeg",@"JPG",@"JPEG",NSFileTypeForHFSTypeCode( 'JPEG' ),@"public.jpeg",@"image/jpeg",nil]]; - } - if (types & GIF_ENABLED) - { - [fileTypes addObjectsFromArray:[NSArray arrayWithObjects:@"gif",@"GIF",NSFileTypeForHFSTypeCode( 'GIFf' ),@"public.gif",@"image/gif",nil]]; - } - return fileTypes; -} - -@end diff --git a/imageoptim/GetQueueCountCommand.h b/imageoptim/GetQueueCountCommand.h new file mode 100644 index 00000000..192dd588 --- /dev/null +++ b/imageoptim/GetQueueCountCommand.h @@ -0,0 +1,11 @@ +@import Cocoa; + +/* This class implements a simple verb with no parameters. The verb +returns an integer number. Verbs don't get much simpler than this. */ + +@interface GetQueueCountCommand : NSScriptCommand { +} + +- (id)performDefaultImplementation; + +@end diff --git a/imageoptim/GetQueueCountCommand.m b/imageoptim/GetQueueCountCommand.m new file mode 100644 index 00000000..a020925e --- /dev/null +++ b/imageoptim/GetQueueCountCommand.m @@ -0,0 +1,13 @@ +#import "GetQueueCountCommand.h" +#import "ImageOptimController.h" +#import "FilesController.h" + +@implementation GetQueueCountCommand + +- (id)performDefaultImplementation { + ImageOptimController *imageoptim = (ImageOptimController *)[[NSApplication sharedApplication] delegate]; + + return imageoptim.filesController.queueCount; +} + +@end diff --git a/imageoptim/ImageOptim.entitlements b/imageoptim/ImageOptim.entitlements new file mode 100644 index 00000000..ac57ddb8 --- /dev/null +++ b/imageoptim/ImageOptim.entitlements @@ -0,0 +1,13 @@ + + + + + com.apple.security.application-groups + + 59KZTZA4XR.net.pornel.ImageOptim + + com.apple.security.get-task-allow + + + + diff --git a/imageoptim/ImageOptim.h b/imageoptim/ImageOptim.h deleted file mode 100644 index 49b21885..00000000 --- a/imageoptim/ImageOptim.h +++ /dev/null @@ -1,46 +0,0 @@ -/* ImageOptim */ -#import - - -@class FilesQueue; -@class PrefsController; - -@interface ImageOptim : NSObject -{ - IBOutlet NSTableView *tableView; - IBOutlet NSArrayController *filesController; - - FilesQueue *filesQueue; - PrefsController *prefsController; - - IBOutlet NSProgressIndicator *progressBar; - IBOutlet NSTextField *statusBarLabel; - IBOutlet NSTextView *credits; - - IBOutlet NSTableColumn *sizeColumn, *originalSizeColumn, *savingsColumn, *bestToolColumn; - - NSIndexSet* selectedIndexes; - QLPreviewPanel* previewPanel; - - dispatch_source_t statusBarUpdateQueue; - IBOutlet NSNumberFormatter *savingsFormatter; -} - -- (IBAction)showPrefs:(id)sender; -- (IBAction)startAgain:(id)sender; -- (IBAction)startAgainOptimized:(id)sender; -- (IBAction)clearComplete:(id)sender; - --(IBAction)quickLookAction:(id)sender; --(IBAction)openHomepage:(id)sender; --(IBAction)viewSource:(id)sender; --(IBAction)browseForFiles:(id)sender; - -+ (void)initialize; - -+(int)numberOfCPUs; - -@property (copy,nonatomic) NSIndexSet* selectedIndexes; - -@property (readonly) FilesQueue *filesQueue; -@end diff --git a/imageoptim/ImageOptim.icns b/imageoptim/ImageOptim.icns index 3aa080a9..9fb5e1df 100644 Binary files a/imageoptim/ImageOptim.icns and b/imageoptim/ImageOptim.icns differ diff --git a/imageoptim/ImageOptim.m b/imageoptim/ImageOptim.m deleted file mode 100644 index 3a444328..00000000 --- a/imageoptim/ImageOptim.m +++ /dev/null @@ -1,355 +0,0 @@ -#import "ImageOptim.h" -#import "FilesQueue.h" -#import "RevealButtonCell.h" -#import "File.h" -#import "Workers/Worker.h" -#import "PrefsController.h" -#include -#include -#import - -@implementation ImageOptim - -@synthesize selectedIndexes,filesQueue; - -- (void)setSelectedIndexes:(NSIndexSet *)indexSet -{ - //Get information from ArrayController - if (indexSet != selectedIndexes) { - selectedIndexes = [indexSet copy]; - [previewPanel reloadData]; - } -} - -+ (void)migrateOldPreferences -{ - NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; - - BOOL migrated = [userDefaults boolForKey:@"PrefsMigrated"]; - if (!migrated) { - NSString *const oldKeys[] = { - @"AdvPng.Bundle", @"AdvPng.Enabled", @"AdvPng.Level", @"AdvPng.Path", @"Gifsicle.Bundle", @"Gifsicle.Enabled", @"Gifsicle.Path", - @"JpegOptim.Bundle", @"JpegOptim.Enabled", @"JpegOptim.MaxQuality", @"JpegOptim.Path", @"JpegOptim.StripComments", @"JpegOptim.StripExif", - @"JpegTran.Bundle", @"JpegTran.Enabled", @"JpegTran.Path", @"OptiPng.Bundle", @"OptiPng.Enabled", @"OptiPng.Level", @"OptiPng.Path", - @"PngCrush.Bundle", @"PngCrush.Chunks", @"PngCrush.Enabled", @"PngCrush.Path", @"PngOut.Bundle", @"PngOut.Enabled", - @"PngOut.InterruptIfTakesTooLong", @"PngOut.Level", @"PngOut.Path", @"PngOut.RemoveChunks", - }; - - for(int i=0; i < sizeof(oldKeys)/sizeof(oldKeys[0]); i++) { - id oldValue = [userDefaults objectForKey:oldKeys[i]]; - if (oldValue) { - NSString *newKey = [oldKeys[i] stringByReplacingOccurrencesOfString:@"." withString:@""]; - id newValue = [userDefaults objectForKey:newKey]; - if (![oldValue isEqual:newValue]) { - [userDefaults setObject:oldValue forKey:newKey]; - } else { - [userDefaults removeObjectForKey:oldKeys[i]]; // FIXME: remove unconditionally after a while - } - } - } - [userDefaults setBool:YES forKey:@"PrefsMigrated"]; - } -} - -+(void)initialize -{ - NSMutableDictionary *defs = [NSMutableDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"defaults" ofType:@"plist"]]; - - int maxTasks = [self numberOfCPUs]+1; - if (maxTasks > 8) maxTasks++; - - [defs setObject:[NSNumber numberWithInt:maxTasks] forKey:@"RunConcurrentTasks"]; - [defs setObject:[NSNumber numberWithInt:(int)ceil((double)maxTasks/3.9)] forKey:@"RunConcurrentDirscans"]; - - [[NSUserDefaults standardUserDefaults] registerDefaults:defs]; - - [self migrateOldPreferences]; -} - -NSString *formatSize(long long byteSize, NSNumberFormatter *formatter) -{ - NSString *unit; - double size; - - if (byteSize > 1000*1000LL) { - size = (double)byteSize / (1000.0*1000.0); - unit = NSLocalizedString(@"MB", "megabytes suffix"); - } else { - size = (double)byteSize / 1000.0; - unit = NSLocalizedString(@"KB", "kilobytes suffix"); - } - - return [[formatter stringFromNumber:[NSNumber numberWithDouble:size]] stringByAppendingString:unit]; -}; - - --(void)initStatusbar -{ - [[statusBarLabel cell] setBackgroundStyle:NSBackgroundStyleRaised]; - - static BOOL overallAvg = NO; - static NSString *defaultText; defaultText = statusBarLabel.stringValue; - static NSNumberFormatter* formatter; formatter = [NSNumberFormatter new]; - static NSNumberFormatter* percFormatter; percFormatter = [NSNumberFormatter new]; - - [formatter setMaximumFractionDigits:1]; - [percFormatter setMaximumFractionDigits:1]; - [formatter setNumberStyle: NSNumberFormatterDecimalStyle]; - [percFormatter setNumberStyle: NSNumberFormatterPercentStyle]; - - statusBarUpdateQueue = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_OR, 0, 0, dispatch_get_main_queue()); - dispatch_source_set_event_handler(statusBarUpdateQueue, ^{ - NSString *str = defaultText; - if ([filesController.arrangedObjects count] > 1) { - NSNumber *bytes = [filesController valueForKeyPath:@"arrangedObjects.@sum.byteSize"], - *optimized = [filesController valueForKeyPath:@"arrangedObjects.@sum.byteSizeOptimized"]; - - if ([bytes longLongValue] != [optimized longLongValue]) { - long long bytesL = [bytes longLongValue], bytesSaved = bytesL - [optimized longLongValue]; - double savedAvg = [[filesController valueForKeyPath:@"arrangedObjects.@avg.percentOptimized"] doubleValue]; - double savedTotal = 100.0*(1.0-[optimized doubleValue]/[bytes doubleValue]); - - NSString *fmtStr; NSNumber *avgNum; - if (savedTotal*0.9 > savedAvg) { - overallAvg = YES; - } else if (savedAvg*0.9 > savedTotal){ - overallAvg = NO; - } - - if (overallAvg) { - fmtStr = NSLocalizedString(@"Saved %@ out of %@. %@ overall (up to %@ per file)","total ratio"); - avgNum = [NSNumber numberWithDouble:savedTotal/100.0]; - } else { - fmtStr = NSLocalizedString(@"Saved %@ out of %@. %@ per file on average (up to %@)","per file avg"); - avgNum = [NSNumber numberWithDouble:savedAvg/100.0]; - } - - double max = [[filesController valueForKeyPath:@"arrangedObjects.@max.percentOptimized"] doubleValue]; - - str = [NSString stringWithFormat:fmtStr, - formatSize(bytesSaved, formatter), - formatSize(bytesL, formatter), - [percFormatter stringFromNumber: avgNum], - [percFormatter stringFromNumber: [NSNumber numberWithDouble:max/100.0]]]; - } - } - [statusBarLabel setStringValue:str]; - }); - dispatch_resume(statusBarUpdateQueue); - - [filesController addObserver:self forKeyPath:@"arrangedObjects.@count" options:NSKeyValueObservingOptionNew context:nil]; - [filesController addObserver:self forKeyPath:@"arrangedObjects.@avg.percentOptimized" options:NSKeyValueObservingOptionNew context:nil]; - [filesController addObserver:self forKeyPath:@"arrangedObjects.@sum.byteSizeOptimized" options:NSKeyValueObservingOptionNew context:nil]; -} - --(void)awakeFromNib -{ - filesQueue = [[FilesQueue alloc] initWithTableView:tableView progressBar:progressBar andController:filesController]; - - RevealButtonCell* cell=[[tableView tableColumnWithIdentifier:@"filename"]dataCell]; - [cell setInfoButtonAction:@selector(openInFinder)]; - [cell setTarget:tableView]; - - [credits setString:@""]; - [credits readRTFDFromFile:[[NSBundle mainBundle] pathForResource:@"Credits" ofType:@"rtf"]]; - - [self initStatusbar]; -} - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - // Defer and coalesce statusbar updates - dispatch_source_merge_data(statusBarUpdateQueue, 1); -} - -+(int)numberOfCPUs -{ - host_basic_info_data_t hostInfo; - mach_msg_type_number_t infoCount; - infoCount = HOST_BASIC_INFO_COUNT; - host_info(mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount); - return MIN(32,MAX(1,(hostInfo.max_cpus))); -} - -// invoked by Dock -- (BOOL)application:(NSApplication *)sender openFile:(NSString *)path -{ - [filesQueue setRow:-1]; - [filesQueue addPath:path]; - [filesQueue runAdded]; - return YES; -} - - --(IBAction)quickLookAction:(id)sender -{ - [filesQueue performSelector:@selector(quickLook)]; -} - -- (IBAction)startAgain:(id)sender -{ - // alt-click on a button (this is used from menu too, but alternative menu item covers that anyway - BOOL onlyOptimized = !!([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask); - [filesQueue startAgainOptimized:onlyOptimized]; -} - -- (IBAction)startAgainOptimized:(id)sender -{ - [filesQueue startAgainOptimized:YES]; -} - - -- (IBAction)clearComplete:(id)sender -{ - [filesQueue clearComplete]; -} - - -- (IBAction)showPrefs:(id)sender -{ - if (!prefsController) { - prefsController = [PrefsController new]; - } - [prefsController showWindow:self]; -} - --(IBAction)openHomepage:(id)sender -{ - [self openURL:@"http://imageoptim.com"]; -} - --(IBAction)viewSource:(id)sender -{ - [self openURL:@"http://imageoptim.com/source"]; -} - --(void)openURL:(NSString *)stringURL -{ - [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:stringURL]]; -} - - --(IBAction)browseForFiles:(id)sender -{ - NSOpenPanel *oPanel = [NSOpenPanel openPanel]; - - [oPanel setAllowsMultipleSelection:YES]; - [oPanel setCanChooseDirectories:YES]; - [oPanel setResolvesAliases:YES]; - [oPanel setAllowedFileTypes:[filesQueue fileTypes]]; - - [oPanel beginSheetModalForWindow:[tableView window] completionHandler:^(NSInteger returnCode) { - if (returnCode == NSOKButton) { - NSWindow *myWindow=[tableView window]; - [myWindow setStyleMask:[myWindow styleMask]| NSResizableWindowMask ]; - [filesQueue setRow:-1]; - [filesQueue addPaths:[oPanel filenames]]; - } - }]; -} - -- (void)windowWillClose:(NSNotification *)aNotification -{ - // let the window close immediately, clean in background - [NSApp performSelectorOnMainThread:@selector(terminate:) withObject:self waitUntilDone:NO]; -} - --(void)applicationWillTerminate:(NSNotification*)n { - [filesQueue cleanup]; -} - --(NSString*)version { - return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; -} - -// Quick Look panel support -- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel; -{ - return YES; -} - -- (void)beginPreviewPanelControl:(QLPreviewPanel *)panel -{ - // This document is now responsible of the preview panel - // It is allowed to set the delegate, data source and refresh panel. - previewPanel = panel; - panel.delegate = self; - panel.dataSource = self; -} - -- (void)endPreviewPanelControl:(QLPreviewPanel *)panel -{ - // This document loses its responsisibility on the preview panel - // Until the next call to -beginPreviewPanelControl: it must not - // change the panel's delegate, data source or refresh it. - previewPanel = nil; -} - -// Quick Look panel data source -- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel -{ - return [[filesController selectedObjects] count]; -} - -- (id )previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index -{ - return [NSURL fileURLWithPath:[[[filesController selectedObjects] objectAtIndex:index]filePath] ]; -} - -// Quick Look panel delegate -- (BOOL)previewPanel:(QLPreviewPanel *)panel handleEvent:(NSEvent *)event -{ - // redirect all key down events to the table view - if ([event type] == NSKeyDown) { - [tableView keyDown:event]; - return YES; - } - return NO; -} - -- (BOOL)validateMenuItem:(NSMenuItem*)menuItem -{ - SEL action = [menuItem action]; - if (action == @selector(startAgain:)) { - return [filesQueue canStartAgainOptimized:NO]; - } else if (action == @selector(startAgainOptimized:)) { - return [filesQueue canStartAgainOptimized:YES]; - } else if (action == @selector(clearComplete:)) { - return [filesQueue canClearComplete]; - } - - return [menuItem isEnabled]; -} - -// This delegate method provides the rect on screen from which the panel will zoom. -- (NSRect)previewPanel:(QLPreviewPanel *)panel sourceFrameOnScreenForPreviewItem:(id )item -{ - NSInteger index = [[filesController arrangedObjects] indexOfObject:item]; - if (index == NSNotFound) { - return NSZeroRect; - } - - NSRect iconRect = [tableView frameOfCellAtColumn:0 row:index]; - - // check that the icon rect is visible on screen - NSRect visibleRect = [tableView visibleRect]; - - if (!NSIntersectsRect(visibleRect, iconRect)) { - return NSZeroRect; - } - - // convert icon rect to screen coordinates - iconRect = [tableView convertRectToBase:iconRect]; - iconRect.origin = [[tableView window] convertBaseToScreen:iconRect.origin]; - - return iconRect; -} - -// This delegate method provides a transition image between the table view and the preview panel -- (id)previewPanel:(QLPreviewPanel *)panel transitionImageForPreviewItem:(id )item contentRect:(NSRect *)contentRect -{ - return [[NSWorkspace sharedWorkspace] iconForFile:[(NSURL *)item path]]; -} - - -@end diff --git a/imageoptim/ImageOptim.xcodeproj/project.pbxproj b/imageoptim/ImageOptim.xcodeproj/project.pbxproj index b704362b..51a7bcaa 100644 --- a/imageoptim/ImageOptim.xcodeproj/project.pbxproj +++ b/imageoptim/ImageOptim.xcodeproj/project.pbxproj @@ -3,50 +3,36 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { -/* Begin PBXAggregateTarget section */ - 5ABB9FEC0E8518DA006F51BB /* bzip archive */ = { - isa = PBXAggregateTarget; - buildConfigurationList = 5ABB9FF10E8518FE006F51BB /* Build configuration list for PBXAggregateTarget "bzip archive" */; - buildPhases = ( - 5ABB9FEB0E8518DA006F51BB /* Tar */, - 5A81644C0E9ACABE00962CF2 /* Sign */, - ); - dependencies = ( - 5ABB9FF00E8518DF006F51BB /* PBXTargetDependency */, - ); - name = "bzip archive"; - productName = BuildArchive; - }; -/* End PBXAggregateTarget section */ - /* Begin PBXBuildFile section */ - 5A0D2E570C922AB700FD7CDE /* File.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D2E560C922AB700FD7CDE /* File.m */; }; - 5A0D2E5D0C922D6D00FD7CDE /* ImageOptim.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D2E5C0C922D6D00FD7CDE /* ImageOptim.m */; }; - 5A0FA76214A7EFCB008FA381 /* pngout in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A0FA76114A7EFCB008FA381 /* pngout */; }; + 1ACFBA171799E9CC006D93B2 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = 1ACFBA191799E9CC006D93B2 /* Credits.html */; }; + 1AD5B24E174F84C600BC75FD /* ImageOptimVerbs.sdef in Resources */ = {isa = PBXBuildFile; fileRef = 1AD5B24D174F84C600BC75FD /* ImageOptimVerbs.sdef */; }; + 1AD5B259174FEA6200BC75FD /* GetQueueCountCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AD5B250174F850900BC75FD /* GetQueueCountCommand.m */; }; + 5A05C5B91B55B40A000E32E3 /* ImageOptim.icns in Resources */ = {isa = PBXBuildFile; fileRef = 5AACA80F0CAFE3CA004D45CA /* ImageOptim.icns */; }; + 5A0A24F117492D39003264CC /* ok@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A0A24EF17492D39003264CC /* ok@2x.png */; }; + 5A0A24F617494254003264CC /* noopt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A0A24F217494254003264CC /* noopt@2x.png */; }; + 5A0A24F817494254003264CC /* progress@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A0A24F417494254003264CC /* progress@2x.png */; }; + 5A0A24F917494254003264CC /* wait@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A0A24F517494254003264CC /* wait@2x.png */; }; + 5A0A24FD17495224003264CC /* err@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A0A24FC17495224003264CC /* err@2x.png */; }; 5A16343E140BF97400758D99 /* ImageOptim.icns in Resources */ = {isa = PBXBuildFile; fileRef = 5AACA80F0CAFE3CA004D45CA /* ImageOptim.icns */; }; 5A1D3E8C14366933004EE809 /* style.css in Resources */ = {isa = PBXBuildFile; fileRef = 5A1D3E8B14366933004EE809 /* style.css */; }; - 5A3470A9140BC7D10014F638 /* libimageoptimjpeg.dylib in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A20CCA2112393B90000400D /* libimageoptimjpeg.dylib */; }; - 5A3470AA140BC7DD0014F638 /* liblibpng.dylib in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A20CC951123939C0000400D /* liblibpng.dylib */; }; - 5A3470AB140BC80F0014F638 /* advpng in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A984D4A11238E51007622D7 /* advpng */; }; - 5A3470AC140BC81A0014F638 /* pngcrush in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A1943450FF97F86007C3324 /* pngcrush */; }; - 5A3470AD140BC8250014F638 /* optipng in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A1943680FF980B3007C3324 /* optipng */; }; - 5A3470AE140BC8540014F638 /* jpegoptim in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A62DB07111CCE9F008848D0 /* jpegoptim */; }; - 5A3470AF140BC8590014F638 /* jpegtran in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A739C2B0EA4073700D751E1 /* jpegtran */; }; - 5A3470B0140BC8600014F638 /* gifsicle in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A4DC20D1028ADB200A9DD55 /* gifsicle */; }; + 5A2E55881A7C386900985295 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5A2E55861A7C386900985295 /* InfoPlist.strings */; }; 5A34A634140EEDB900DE44D2 /* DragDropImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A34A633140EEDB900DE44D2 /* DragDropImageView.m */; }; - 5A44F4B40CB1868100BD2884 /* PngCrushWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A44F4B30CB1868100BD2884 /* PngCrushWorker.m */; }; - 5A44F5840CB2ECEB00BD2884 /* CommandWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A44F5830CB2ECEB00BD2884 /* CommandWorker.m */; }; - 5A4DC21B1028AE1800A9DD55 /* GifsicleWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A4DC21A1028AE1800A9DD55 /* GifsicleWorker.m */; }; - 5A5C29430CB04A0F00FAF446 /* OptiPngWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5C29420CB04A0F00FAF446 /* OptiPngWorker.m */; }; + 5A34D0031AEF6DA300A154E4 /* BackendTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ABE15551AE5072300861C6B /* BackendTests.m */; }; + 5A34D0041AEF6DB300A154E4 /* ImageOptimGPL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A34CFEE1AEF6D9800A154E4 /* ImageOptimGPL.h */; }; + 5A34D0991AEF75CE00A154E4 /* JobQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A34D0971AEF75CE00A154E4 /* JobQueue.h */; }; + 5A34D09A1AEF75CE00A154E4 /* JobQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A34D0981AEF75CE00A154E4 /* JobQueue.m */; }; + 5A5811AA1AD73A7E0001838D /* Sparkle.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5811AF1BD73A640001838D /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5A5811AB1AD73A990001838D /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5811AF1BD73A640001838D /* Sparkle.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; + 5A5CD39419662E940096D77F /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5CD39319662E940096D77F /* AppKit.framework */; }; + 5A5CD39619662E9A0096D77F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A5CD39519662E9A0096D77F /* Foundation.framework */; }; 5A6242080CA86DC7005942A3 /* PrefsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A6242070CA86DC7005942A3 /* PrefsController.m */; }; - 5A6E04430EA40B6A00380DE7 /* JpegtranWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A6E04420EA40B6A00380DE7 /* JpegtranWorker.m */; }; + 5A6A56D01B497E210045AA0C /* SharedPrefs.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A1F3CEE1B489796006570E0 /* SharedPrefs.m */; }; 5A714AAD0CB0196A00C242C0 /* MyTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A714AAC0CB0196A00C242C0 /* MyTableView.m */; }; 5A7D24E213E5BC3100815AAA /* PrefsController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A45530D1024EB3000A69944 /* PrefsController.xib */; }; - 5A7D24E313E5BC3100815AAA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A45530A1024EB1100A69944 /* MainMenu.xib */; }; - 5A7D24E413E5BC3100815AAA /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 5A887F8310C17361006A0687 /* Credits.rtf */; }; + 5A7D24E313E5BC3100815AAA /* ImageOptim.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5A45530A1024EB1100A69944 /* ImageOptim.xib */; }; 5A7D24E513E5BC3100815AAA /* Help in Resources */ = {isa = PBXBuildFile; fileRef = 5A95FEBE0CB8041A00737B79 /* Help */; }; 5A7D24E613E5BC3100815AAA /* err.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A9EE4490CB59CDC00F08CC5 /* err.png */; }; 5A7D24E713E5BC3100815AAA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5A94A03A10275E11005CC9CB /* Localizable.strings */; }; @@ -54,26 +40,66 @@ 5A7D24E913E5BC3100815AAA /* ok.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A9EE44B0CB59CDC00F08CC5 /* ok.png */; }; 5A7D24EA13E5BC3100815AAA /* progress.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A9EE4720CB59EC100F08CC5 /* progress.png */; }; 5A7D24EB13E5BC3100815AAA /* wait.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A9EE44C0CB59CDC00F08CC5 /* wait.png */; }; - 5A7D24EC13E5BC3100815AAA /* minus.png in Resources */ = {isa = PBXBuildFile; fileRef = 5AACA3830CAF3DA5004D45CA /* minus.png */; }; - 5A7D24ED13E5BC3100815AAA /* plus.png in Resources */ = {isa = PBXBuildFile; fileRef = 5AACA3840CAF3DA5004D45CA /* plus.png */; }; 5A7D24EE13E5BC3100815AAA /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 5AC63C490E9ABF0A0053B879 /* dsa_pub.pem */; }; 5A7D24EF13E5BC3100815AAA /* defaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5AE54D800CAEE8AC00903DF4 /* defaults.plist */; }; - 5A8594E81460BCF20044095A /* jpegrescan in Copy Executables */ = {isa = PBXBuildFile; fileRef = 5A8594E71460BCF20044095A /* jpegrescan */; }; - 5A8A18141416D1D700D62DB7 /* SavingsFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A8A18131416D1D700D62DB7 /* SavingsFormatter.m */; }; + 5A7FB6D71E2C37DD00481B4A /* SvgoWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A7FB6D61E2C37DD00481B4A /* SvgoWorker.h */; }; + 5A7FB6F31E2C37EB00481B4A /* SvgoWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A7FB6F21E2C37EB00481B4A /* SvgoWorker.m */; }; + 5A7FB7261E2C3E1600481B4A /* svgo.js in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A7FB7251E2C3E1600481B4A /* svgo.js */; }; + 5A93FD2F1FF1C452005D2F27 /* SvgcleanerWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A93FD051FF1BF1F005D2F27 /* SvgcleanerWorker.m */; }; 5A99FE84140AE80600BB2F79 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A99FE83140AE80600BB2F79 /* Quartz.framework */; }; - 5A9AEC19140996D700C9E97D /* reveal.png in Resources */ = {isa = PBXBuildFile; fileRef = 5A9AEC18140996D700C9E97D /* reveal.png */; }; - 5A9E5B2B0CB961E000E05D28 /* JpegoptimWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A9E5B2A0CB961E000E05D28 /* JpegoptimWorker.m */; }; 5AA1B7E9140AC55F00B5707C /* RevealButtonCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A391880140A9B10001B4FD7 /* RevealButtonCell.m */; }; - 5AA6D2501503EA1B006DDB3E /* Sparkle.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 5AA6D2471503E9F6006DDB3E /* Sparkle.framework */; }; - 5AA6D2511503EA29006DDB3E /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AA6D2471503E9F6006DDB3E /* Sparkle.framework */; }; - 5AACA1380CAF23FF004D45CA /* DirWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AACA1370CAF23FF004D45CA /* DirWorker.m */; }; - 5AACA13F0CAF241B004D45CA /* Worker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AACA13E0CAF241B004D45CA /* Worker.m */; }; 5AACA8310CAFE74E004D45CA /* Transformers.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AACA8300CAFE74E004D45CA /* Transformers.m */; }; - 5AE1C49A0CA6CDDC000CF636 /* FilesQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE1C4990CA6CDDC000CF636 /* FilesQueue.m */; }; - 5AE54DEF0CAEF56100903DF4 /* PngoutWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE54DEE0CAEF56100903DF4 /* PngoutWorker.m */; }; - 5AE54E210CAF16D800903DF4 /* AdvCompWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE54E200CAF16D800903DF4 /* AdvCompWorker.m */; }; + 5ABE154D1AE5072300861C6B /* ImageOptimGPL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5ABE15421AE5072300861C6B /* ImageOptimGPL.framework */; }; + 5ABE15591AE5072300861C6B /* ImageOptimGPL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5ABE15421AE5072300861C6B /* ImageOptimGPL.framework */; }; + 5ABE155A1AE5072300861C6B /* ImageOptimGPL.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 5ABE15421AE5072300861C6B /* ImageOptimGPL.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 5ABE15741AE5073100861C6B /* Job.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D2E560C922AB700FD7CDE /* Job.m */; }; + 5ABE15771AE5073100861C6B /* ResultsDb.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A08FE911936982E001DA24B /* ResultsDb.m */; }; + 5ABE15781AE5073E00861C6B /* AdvCompWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE54E200CAF16D800903DF4 /* AdvCompWorker.m */; }; + 5ABE15791AE5073E00861C6B /* CommandWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A44F5830CB2ECEB00BD2884 /* CommandWorker.m */; }; + 5ABE157A1AE5073E00861C6B /* DirScanner.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AACA1370CAF23FF004D45CA /* DirScanner.m */; }; + 5ABE157B1AE5073E00861C6B /* GifsicleWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A4DC21A1028AE1800A9DD55 /* GifsicleWorker.m */; }; + 5ABE157C1AE5073E00861C6B /* JpegoptimWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A9E5B2A0CB961E000E05D28 /* JpegoptimWorker.m */; }; + 5ABE157D1AE5073E00861C6B /* JpegtranWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A6E04420EA40B6A00380DE7 /* JpegtranWorker.m */; }; + 5ABE157E1AE5073E00861C6B /* OxiPngWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A5C29420CB04A0F00FAF446 /* OxiPngWorker.m */; }; + 5ABE157F1AE5073E00861C6B /* PngCrushWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A44F4B30CB1868100BD2884 /* PngCrushWorker.m */; }; + 5ABE15801AE5073E00861C6B /* PngoutWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE54DEE0CAEF56100903DF4 /* PngoutWorker.m */; }; + 5ABE15811AE5073E00861C6B /* Save.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AB81F941AE1BE1300719AB7 /* Save.m */; }; + 5ABE15821AE5073E00861C6B /* Worker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AACA13E0CAF241B004D45CA /* Worker.m */; }; + 5ABE15831AE5073E00861C6B /* ZopfliWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD131790935C004992B7 /* ZopfliWorker.m */; }; + 5ABE15841AE5074900861C6B /* pngout in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5AF71642174AF7C30018D3FE /* pngout */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE161B1AE508E600861C6B /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A08FDAF1933D635001DA24B /* libsqlite3.dylib */; }; + 5ABE161C1AE508F400861C6B /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AEF1B1D10F2BCA900E3E4F0 /* AppKit.framework */; }; + 5ABE161D1AE508FA00861C6B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AEF1B2110F2BCB200E3E4F0 /* Foundation.framework */; }; + 5ABE161F1AE5094600861C6B /* pngcrush in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A1943450FF97F86007C3324 /* pngcrush */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE16231AE5095B00861C6B /* jpegtran in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A739C2B0EA4073700D751E1 /* jpegtran */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE16241AE5096300861C6B /* jpegoptim in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A62DB07111CCE9F008848D0 /* jpegoptim */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE16251AE5096800861C6B /* libimageoptimjpeg.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A20CCA2112393B90000400D /* libimageoptimjpeg.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE16261AE5096D00861C6B /* gifsicle in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A4DC20D1028ADB200A9DD55 /* gifsicle */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE16271AE5097800861C6B /* advpng in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A984D4A11238E51007622D7 /* advpng */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE16291AE5099500861C6B /* liblibpng.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A20CC951123939C0000400D /* liblibpng.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE162A1AE5099F00861C6B /* zopflipng in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A1EBED317908F8200361F08 /* zopflipng */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5ABE16621AE50D1D00861C6B /* ImageOptimController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D2E5C0C922D6D00FD7CDE /* ImageOptimController.m */; }; + 5ABE16D01AE5AD0200861C6B /* FilesController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AE1C4990CA6CDDC000CF636 /* FilesController.m */; }; + 5ABE16D21AE5AD9F00861C6B /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 5ABE16D11AE5AD9F00861C6B /* log.c */; }; + 5AC4CBB31AF3FFA10003AEA2 /* ImageOptimGPL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5ABE15421AE5072300861C6B /* ImageOptimGPL.framework */; }; + 5AC4CC801AF568E90003AEA2 /* SavingsFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A8A18131416D1D700D62DB7 /* SavingsFormatter.m */; }; + 5AC64EC21AF3FCFE0032AA7F /* unoptimized.png in Resources */ = {isa = PBXBuildFile; fileRef = 5AC64EC11AF3FCFE0032AA7F /* unoptimized.png */; }; + 5AC64F071AF3FDEE0032AA7F /* ExtensionController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AC64F061AF3FDEE0032AA7F /* ExtensionController.m */; }; + 5AC64F091AF3FDEE0032AA7F /* ExtensionController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5AC64F081AF3FDEE0032AA7F /* ExtensionController.xib */; }; + 5AC64F0C1AF3FDEE0032AA7F /* ImageOptimize.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 5AC64EFE1AF3FDEE0032AA7F /* ImageOptimize.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 5AD033531E26B6840030291A /* File.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AD033511E26B6840030291A /* File.h */; }; + 5AD033541E26B6840030291A /* File.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AD033521E26B6840030291A /* File.m */; }; + 5AD0347C1E27185D0030291A /* TempFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AD0347A1E27185D0030291A /* TempFile.h */; }; + 5AD0347D1E27185D0030291A /* TempFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AD0347B1E27185D0030291A /* TempFile.m */; }; + 5AE04E2E1B5301E100669E85 /* PngquantWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AA9F4371899D063006C64C8 /* PngquantWorker.m */; }; + 5AF8536C1B49F21C00CF76F5 /* FadeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AF8536B1B49F21C00CF76F5 /* FadeView.m */; }; + 5F91633A2ADB7A7B00230D34 /* pngquant in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5F9163392ADB7A7B00230D34 /* pngquant */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5FD569DD21A059A000BC9F82 /* JobProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FD569DC21A059A000BC9F82 /* JobProxy.m */; }; + 5FFC96C1275842310035D0A2 /* oxipng in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5F75B47527583B9B0072F27A /* oxipng */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 5FFC9752275843210035D0A2 /* svgcleaner in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5FFC9750275843160035D0A2 /* svgcleaner */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; - 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; + D047E4651E7C3D7C0036F96B /* GuetzliWorker.m in Sources */ = {isa = PBXBuildFile; fileRef = D047E4641E7C3D7C0036F96B /* GuetzliWorker.m */; }; + D047E5311E7D90DD0036F96B /* guetzli in CopyFiles */ = {isa = PBXBuildFile; fileRef = D047E4861E7D7E310036F96B /* guetzli */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -84,12 +110,19 @@ remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; remoteInfo = pngcrush; }; - 5A1943670FF980B3007C3324 /* PBXContainerItemProxy */ = { + 5A1EBED217908F8200361F08 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A9D56BC0E7F242C000F129F /* optipng.xcodeproj */; + containerPortal = 5A1EBE7617908DC300361F08 /* zopfli-png.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; - remoteInfo = optipng; + remoteGlobalIDString = 5A1EBE6A17908D9D00361F08; + remoteInfo = "zopfli-png"; + }; + 5A1F3CA61B4800D8006570E0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5ABE15411AE5072300861C6B; + remoteInfo = Backend; }; 5A20CC941123939C0000400D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -98,13 +131,6 @@ remoteGlobalIDString = D2AAC0630554660B00DB518D; remoteInfo = libpng; }; - 5A20CC97112393AC0000400D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5A20CC8E1123939C0000400D /* libpng.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = D2AAC0620554660B00DB518D; - remoteInfo = libpng; - }; 5A20CCA1112393B90000400D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5A20CC9D112393B80000400D /* jpeg.xcodeproj */; @@ -112,13 +138,6 @@ remoteGlobalIDString = D2AAC0630554660B00DB518D; remoteInfo = jpeg; }; - 5A20CCA4112393CC0000400D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5A20CC9D112393B80000400D /* jpeg.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = D2AAC0620554660B00DB518D; - remoteInfo = jpeg; - }; 5A453F9A16BE79B6002AFE23 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; @@ -126,75 +145,75 @@ remoteGlobalIDString = 5A453F8D16BE79A7002AFE23; remoteInfo = downloads; }; - 5A4DC1931028284400A9DD55 /* PBXContainerItemProxy */ = { + 5A4DC20C1028ADB200A9DD55 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A9D56BC0E7F242C000F129F /* optipng.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; - remoteInfo = optipng; + containerPortal = 5A4DC2051028ADB200A9DD55 /* gifsicle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; + remoteInfo = gifsicle; }; - 5A4DC1951028284400A9DD55 /* PBXContainerItemProxy */ = { + 5A58119E1AD73A640001838D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A739C260EA4073700D751E1 /* jpegtran.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; - remoteInfo = jpegtran; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 8DC2EF5B0486A6940098B216; + remoteInfo = Sparkle; }; - 5A4DC1971028284400A9DD55 /* PBXContainerItemProxy */ = { + 5A5811A01AD73A640001838D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A1943390FF97F86007C3324 /* pngcrush.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; - remoteInfo = pngcrush; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 61B5F90209C4CEE200B25A18; + remoteInfo = "Sparkle Test App"; }; - 5A4DC20C1028ADB200A9DD55 /* PBXContainerItemProxy */ = { + 5A5811A21AD73A640001838D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A4DC2051028ADB200A9DD55 /* gifsicle.xcodeproj */; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; - remoteInfo = gifsicle; + remoteGlobalIDString = 612279D90DB5470200AB99EA; + remoteInfo = "Sparkle Unit Tests"; }; - 5A62DB06111CCE9F008848D0 /* PBXContainerItemProxy */ = { + 5A5811A41AD73A640001838D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A8167EC0EA11F9D00962CF2 /* jpegoptim.xcodeproj */; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; - remoteInfo = jpegoptim; + remoteGlobalIDString = 5D06E8D00FD68C7C005AE3F6; + remoteInfo = BinaryDelta; }; - 5A6CEA82102B887C0058D07E /* PBXContainerItemProxy */ = { + 5A5811A61AD73A640001838D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A4DC2051028ADB200A9DD55 /* gifsicle.xcodeproj */; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 55C14BB7136EEF1500649790; + remoteInfo = Autoupdate; + }; + 5A5811A81AD73A700001838D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; proxyType = 1; - remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; - remoteInfo = gifsicle; + remoteGlobalIDString = 8DC2EF4F0486A6940098B216; + remoteInfo = Sparkle; }; - 5A739C2A0EA4073700D751E1 /* PBXContainerItemProxy */ = { + 5A62DB06111CCE9F008848D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A739C260EA4073700D751E1 /* jpegtran.xcodeproj */; + containerPortal = 5A8167EC0EA11F9D00962CF2 /* jpegoptim.xcodeproj */; proxyType = 2; remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; - remoteInfo = jpegtran; - }; - 5A8594D81460BC5B0044095A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5A739C260EA4073700D751E1 /* jpegtran.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 5A8594DE1460BCA70044095A; - remoteInfo = jpegrescan; + remoteInfo = jpegoptim; }; - 5A8594E61460BCF20044095A /* PBXContainerItemProxy */ = { + 5A739C2A0EA4073700D751E1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5A739C260EA4073700D751E1 /* jpegtran.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 5A8594DF1460BCA70044095A; - remoteInfo = jpegrescan; + remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; + remoteInfo = jpegtran; }; - 5A937646111CD26B005BA5B1 /* PBXContainerItemProxy */ = { + 5A7FB7231E2C3DF800481B4A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5A8167EC0EA11F9D00962CF2 /* jpegoptim.xcodeproj */; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; proxyType = 1; - remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; - remoteInfo = jpegoptim; + remoteGlobalIDString = 5A7FB7051E2C39CC00481B4A; + remoteInfo = SVGO; }; 5A95D412139D72A8005FD6FB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -210,121 +229,320 @@ remoteGlobalIDString = 8DD76FB20486AB0100D96B5E; remoteInfo = advpng; }; - 5A984D5211238E69007622D7 /* PBXContainerItemProxy */ = { + 5AB114B01B52AEE700A3C73A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5A453F8D16BE79A7002AFE23; + remoteInfo = downloads; + }; + 5ABE154E1AE5072300861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5ABE15411AE5072300861C6B; + remoteInfo = Backend; + }; + 5ABE15501AE5072300861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D1107260486CEB800E47090; + remoteInfo = ImageOptim; + }; + 5ABE15571AE5072300861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5ABE15411AE5072300861C6B; + remoteInfo = Backend; + }; + 5ABE16051AE5089300861C6B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 5A984D4011238E51007622D7 /* advpng.xcodeproj */; proxyType = 1; remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; remoteInfo = advpng; }; - 5AA6D2461503E9F6006DDB3E /* PBXContainerItemProxy */ = { + 5ABE16071AE5089700861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A20CC8E1123939C0000400D /* libpng.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = D2AAC0620554660B00DB518D; + remoteInfo = libpng; + }; + 5ABE16091AE5089D00861C6B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */; + containerPortal = 5A4DC2051028ADB200A9DD55 /* gifsicle.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; + remoteInfo = gifsicle; + }; + 5ABE160B1AE508A000861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A20CC9D112393B80000400D /* jpeg.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = D2AAC0620554660B00DB518D; + remoteInfo = jpeg; + }; + 5ABE160D1AE508A300861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A8167EC0EA11F9D00962CF2 /* jpegoptim.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; + remoteInfo = jpegoptim; + }; + 5ABE160F1AE508C200861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A739C260EA4073700D751E1 /* jpegtran.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; + remoteInfo = jpegtran; + }; + 5ABE16151AE508C200861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A1943390FF97F86007C3324 /* pngcrush.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 8DD76FA90486AB0100D96B5E; + remoteInfo = pngcrush; + }; + 5ABE16191AE508C200861C6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A1EBE7617908DC300361F08 /* zopfli-png.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 5A1EBE6917908D9D00361F08; + remoteInfo = zopflipng; + }; + 5AC64F0A1AF3FDEE0032AA7F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5AC64EFD1AF3FDEE0032AA7F; + remoteInfo = ImageOptimize; + }; + 5ADDF2FE1CE613A800B4AD58 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 8DC2EF5B0486A6940098B216; - remoteInfo = Sparkle; + remoteGlobalIDString = 726B2B5D1C645FC900388755; + remoteInfo = "UI Tests"; }; - 5AA6D2481503E9F6006DDB3E /* PBXContainerItemProxy */ = { + 5F4F10A92ADE0E3000A3093E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */; + containerPortal = 5A728F191836C0EE004D0D73 /* pngquant.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = CA008FFA42533B3B3D19E325; + remoteInfo = "pngquant-bin"; + }; + 5F75B47427583B9B0072F27A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A9D56BC0E7F242C000F129F /* oxipng.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 61B5F90209C4CEE200B25A18; - remoteInfo = "Sparkle Test App"; + remoteGlobalIDString = CA60B9BBFEB6CD5654E156DF; + remoteInfo = "oxipng-bin"; }; - 5AA6D24A1503E9F6006DDB3E /* PBXContainerItemProxy */ = { + 5F9163382ADB7A7B00230D34 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */; + containerPortal = 5A728F191836C0EE004D0D73 /* pngquant.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 612279D90DB5470200AB99EA; - remoteInfo = "Sparkle Unit Tests"; + remoteGlobalIDString = CA6059EC40528780035A8A54; + remoteInfo = "pngquant-bin"; }; - 5AA6D24C1503E9F6006DDB3E /* PBXContainerItemProxy */ = { + 5FFC969A275842290035D0A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */; + containerPortal = 5A9D56BC0E7F242C000F129F /* oxipng.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = CA00E01F74FCA9B0E7F50B60; + remoteInfo = "oxipng-bin"; + }; + 5FFC96B7275842290035D0A2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; proxyType = 2; - remoteGlobalIDString = 55C14BB7136EEF1500649790; - remoteInfo = finish_installation; + remoteGlobalIDString = 5AB8F19F214DA72000A1187F; + remoteInfo = generate_keys; }; - 5AA6D24E1503EA07006DDB3E /* PBXContainerItemProxy */ = { + 5FFC96B9275842290035D0A2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5A5ADED7214EDE4900DF0099; + remoteInfo = sign_update; + }; + 5FFC96BB275842290035D0A2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EA4311EA229D651300A5503D; + remoteInfo = bsdiff; + }; + 5FFC96BD275842290035D0A2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = EA4311A0229D5FBC00A5503D; + remoteInfo = ed25519; + }; + 5FFC974F275843160035D0A2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A93FB491FF1BB2C005D2F27 /* svgcleaner.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = CA6070D14537821B170C4A65; + remoteInfo = "svgcleaner-bin"; + }; + 5FFC9753275843280035D0A2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A93FB491FF1BB2C005D2F27 /* svgcleaner.xcodeproj */; proxyType = 1; - remoteGlobalIDString = 8DC2EF4F0486A6940098B216; - remoteInfo = Sparkle; + remoteGlobalIDString = CA00FC5A7BA8C09639ADC154; + remoteInfo = "svgcleaner-bin"; }; - 5ABB9FEF0E8518DF006F51BB /* PBXContainerItemProxy */ = { + D047E45F1E7C3CE80036F96B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 722954B41D04ADAF00ECF9CA; + remoteInfo = fileop; + }; + D047E4611E7C3CE80036F96B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 5AE13FB31E0D9E07000D2C2C; + remoteInfo = generate_appcast; + }; + D047E4851E7D7E310036F96B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D047E47C1E7D7DF00036F96B /* guetzli.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = D047E4721E7D7DF00036F96B; + remoteInfo = guetzli; + }; + D047E4CC1E7D81040036F96B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D047E47C1E7D7DF00036F96B /* guetzli.xcodeproj */; proxyType = 1; - remoteGlobalIDString = 8D1107260486CEB800E47090; - remoteInfo = ImageOptim; + remoteGlobalIDString = D047E4E71E7D868D0036F96B; + remoteInfo = guetzli; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ - 5A3470A8140BC7B50014F638 /* Copy Executables */ = { + 5A5C88511B4E7DCA00BF10B0 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; dstPath = ""; - dstSubfolderSpec = 6; + dstSubfolderSpec = 7; files = ( - 5A3470AB140BC80F0014F638 /* advpng in Copy Executables */, - 5A3470B0140BC8600014F638 /* gifsicle in Copy Executables */, - 5A3470AE140BC8540014F638 /* jpegoptim in Copy Executables */, - 5A8594E81460BCF20044095A /* jpegrescan in Copy Executables */, - 5A3470AF140BC8590014F638 /* jpegtran in Copy Executables */, - 5A3470A9140BC7D10014F638 /* libimageoptimjpeg.dylib in Copy Executables */, - 5A3470AA140BC7DD0014F638 /* liblibpng.dylib in Copy Executables */, - 5A3470AD140BC8250014F638 /* optipng in Copy Executables */, - 5A3470AC140BC81A0014F638 /* pngcrush in Copy Executables */, - 5A0FA76214A7EFCB008FA381 /* pngout in Copy Executables */, - ); - name = "Copy Executables"; + 5ABE16271AE5097800861C6B /* advpng in CopyFiles */, + 5ABE16261AE5096D00861C6B /* gifsicle in CopyFiles */, + D047E5311E7D90DD0036F96B /* guetzli in CopyFiles */, + 5ABE16241AE5096300861C6B /* jpegoptim in CopyFiles */, + 5ABE16231AE5095B00861C6B /* jpegtran in CopyFiles */, + 5ABE16251AE5096800861C6B /* libimageoptimjpeg.dylib in CopyFiles */, + 5ABE16291AE5099500861C6B /* liblibpng.dylib in CopyFiles */, + 5FFC96C1275842310035D0A2 /* oxipng in CopyFiles */, + 5ABE161F1AE5094600861C6B /* pngcrush in CopyFiles */, + 5ABE15841AE5074900861C6B /* pngout in CopyFiles */, + 5F91633A2ADB7A7B00230D34 /* pngquant in CopyFiles */, + 5FFC9752275843210035D0A2 /* svgcleaner in CopyFiles */, + 5A7FB7261E2C3E1600481B4A /* svgo.js in CopyFiles */, + 5ABE162A1AE5099F00861C6B /* zopflipng in CopyFiles */, + ); runOnlyForDeploymentPostprocessing = 0; }; 5AC63C410E9ABCFD0053B879 /* Copy Frameworks */ = { isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; + buildActionMask = 12; dstPath = ""; dstSubfolderSpec = 10; files = ( - 5AA6D2501503EA1B006DDB3E /* Sparkle.framework in Copy Frameworks */, + 5ABE155A1AE5072300861C6B /* ImageOptimGPL.framework in Copy Frameworks */, + 5A5811AA1AD73A7E0001838D /* Sparkle.framework in Copy Frameworks */, ); name = "Copy Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 5AC64F231AF3FDEF0032AA7F /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 5AC64F0C1AF3FDEE0032AA7F /* ImageOptimize.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; - 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; + 1A9AF7C317565DCE002ED2A5 /* lt */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lt; path = lt.lproj/Help; sourceTree = ""; }; + 1A9AF7C517565DCE002ED2A5 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/Localizable.strings; sourceTree = ""; }; + 1A9AF7C617565DCE002ED2A5 /* lt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = lt; path = lt.lproj/ImageOptim.strings; sourceTree = ""; }; + 1A9AF7C717565DCE002ED2A5 /* lt */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = lt; path = lt.lproj/PrefsController.strings; sourceTree = ""; }; + 1ACFBA181799E9CC006D93B2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = en; path = en.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA39179A1314006D93B2 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = pl; path = pl.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA3A179A1348006D93B2 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = da; path = da.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA3C179A1350006D93B2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = nl; path = nl.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA3D179A1351006D93B2 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = es; path = es.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA3E179A1352006D93B2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = fr; path = fr.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA3F179A1352006D93B2 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = de; path = de.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA44179A1356006D93B2 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = pt; path = pt.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA45179A1357006D93B2 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = "pt-BR"; path = "pt-BR.lproj/Credits.html"; sourceTree = ""; }; + 1ACFBA47179A1359006D93B2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = sv; path = sv.lproj/Credits.html; sourceTree = ""; }; + 1ACFBA49179A135B006D93B2 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = it; path = it.lproj/Credits.html; sourceTree = ""; }; + 1AD5B24D174F84C600BC75FD /* ImageOptimVerbs.sdef */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = ImageOptimVerbs.sdef; sourceTree = ""; }; + 1AD5B24F174F850900BC75FD /* GetQueueCountCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GetQueueCountCommand.h; sourceTree = ""; }; + 1AD5B250174F850900BC75FD /* GetQueueCountCommand.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GetQueueCountCommand.m; sourceTree = ""; }; + 1B5210E316BFA7C90044C869 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "zh-Hant"; path = "zh-Hant.lproj/Help"; sourceTree = ""; }; + 1B5210E516BFA7CA0044C869 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/Localizable.strings"; sourceTree = ""; }; + 1B5210E616BFA7CA0044C869 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/ImageOptim.strings"; sourceTree = ""; }; + 1B5210E716BFA7CA0044C869 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/PrefsController.strings"; sourceTree = ""; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; - 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; - 5A0343B012998485002091AA /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = pt; path = pt.lproj/Credits.rtf; sourceTree = ""; }; - 5A0343BE129984B3002091AA /* pt */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt; path = pt.lproj/MainMenu.xib; sourceTree = ""; }; - 5A0343BF129984BA002091AA /* pt */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt; path = pt.lproj/PrefsController.xib; sourceTree = ""; }; + 5A012EBD17A89234002E794E /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = cs; path = cs.lproj/Credits.html; sourceTree = ""; }; + 5A012ECC17A89238002E794E /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = tr; path = tr.lproj/Credits.html; sourceTree = ""; }; + 5A012ECD17A89239002E794E /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = vi; path = vi.lproj/Credits.html; sourceTree = ""; }; + 5A012EFC17A89860002E794E /* no */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = no; path = no.lproj/Credits.html; sourceTree = ""; }; + 5A0343BE129984B3002091AA /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A0343BF129984BA002091AA /* pt */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = pt; path = pt.lproj/PrefsController.strings; sourceTree = ""; }; 5A034423129985D5002091AA /* pt */ = {isa = PBXFileReference; lastKnownFileType = folder; name = pt; path = pt.lproj/Help; sourceTree = ""; }; - 5A03443612998825002091AA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ru; path = ru.lproj/Credits.rtf; sourceTree = ""; }; - 5A0344371299882B002091AA /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/MainMenu.xib; sourceTree = ""; }; - 5A0344381299882F002091AA /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ru; path = ru.lproj/PrefsController.xib; sourceTree = ""; }; + 5A0344371299882B002091AA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A0344381299882F002091AA /* ru */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = ru; path = ru.lproj/PrefsController.strings; sourceTree = ""; }; 5A03443A12998845002091AA /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 5A03443B1299884F002091AA /* ru */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ru; path = ru.lproj/Help; sourceTree = ""; }; + 5A059F1A1B6506C400FC8184 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A08FDAF1933D635001DA24B /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; + 5A08FE901936982E001DA24B /* ResultsDb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResultsDb.h; sourceTree = ""; }; + 5A08FE911936982E001DA24B /* ResultsDb.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ResultsDb.m; sourceTree = ""; }; 5A09013F0ED8D6AA00F3965B /* appcast.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = appcast.xml; sourceTree = ""; }; - 5A0901400ED8D6B800F3965B /* sparkle.sig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = sparkle.sig; path = build/Release/sparkle.sig; sourceTree = ""; }; - 5A0D2E550C922AB700FD7CDE /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = File.h; sourceTree = ""; }; - 5A0D2E560C922AB700FD7CDE /* File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = File.m; sourceTree = ""; }; - 5A0D2E5B0C922D6D00FD7CDE /* ImageOptim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageOptim.h; sourceTree = ""; }; - 5A0D2E5C0C922D6D00FD7CDE /* ImageOptim.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageOptim.m; sourceTree = ""; }; - 5A0FA76114A7EFCB008FA381 /* pngout */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = pngout; sourceTree = ""; }; + 5A0A24EF17492D39003264CC /* ok@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ok@2x.png"; sourceTree = ""; }; + 5A0A24F217494254003264CC /* noopt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "noopt@2x.png"; sourceTree = ""; }; + 5A0A24F417494254003264CC /* progress@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "progress@2x.png"; sourceTree = ""; }; + 5A0A24F517494254003264CC /* wait@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "wait@2x.png"; sourceTree = ""; }; + 5A0A24FC17495224003264CC /* err@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "err@2x.png"; sourceTree = ""; }; + 5A0D2E550C922AB700FD7CDE /* Job.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Job.h; path = Backend/Job.h; sourceTree = ""; }; + 5A0D2E560C922AB700FD7CDE /* Job.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Job.m; path = Backend/Job.m; sourceTree = ""; }; + 5A0D2E5B0C922D6D00FD7CDE /* ImageOptimController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageOptimController.h; sourceTree = ""; }; + 5A0D2E5C0C922D6D00FD7CDE /* ImageOptimController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ImageOptimController.m; sourceTree = ""; }; + 5A0E43D81B650F28008EF2EB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/PrefsController.strings; sourceTree = ""; }; 5A1943390FF97F86007C3324 /* pngcrush.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = pngcrush.xcodeproj; path = ../pngcrush/pngcrush.xcodeproj; sourceTree = SOURCE_ROOT; }; 5A1D3E8B14366933004EE809 /* style.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = style.css; sourceTree = ""; }; + 5A1EBE7617908DC300361F08 /* zopfli-png.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "zopfli-png.xcodeproj"; path = "../zopfli-png/zopfli-png.xcodeproj"; sourceTree = ""; }; + 5A1F3CEE1B489796006570E0 /* SharedPrefs.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SharedPrefs.m; sourceTree = ""; }; + 5A1F3D001B4897B3006570E0 /* SharedPrefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedPrefs.h; sourceTree = ""; }; 5A20CC8E1123939C0000400D /* libpng.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libpng.xcodeproj; path = ../libpng/libpng.xcodeproj; sourceTree = SOURCE_ROOT; }; 5A20CC9D112393B80000400D /* jpeg.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = jpeg.xcodeproj; path = ../libjpeg/jpeg.xcodeproj; sourceTree = SOURCE_ROOT; }; 5A27B956139B03090095FC2F /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = release.xcconfig; sourceTree = ""; }; 5A27B9C2139B079A0095FC2F /* debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = debug.xcconfig; sourceTree = ""; }; + 5A2ACD121790935C004992B7 /* ZopfliWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZopfliWorker.h; sourceTree = ""; }; + 5A2ACD131790935C004992B7 /* ZopfliWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ZopfliWorker.m; sourceTree = ""; }; + 5A2E55871A7C386900985295 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; 5A34A632140EEDB900DE44D2 /* DragDropImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragDropImageView.h; sourceTree = ""; }; 5A34A633140EEDB900DE44D2 /* DragDropImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DragDropImageView.m; sourceTree = ""; }; + 5A34CFEE1AEF6D9800A154E4 /* ImageOptimGPL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ImageOptimGPL.h; path = Backend/ImageOptimGPL.h; sourceTree = ""; }; + 5A34D0971AEF75CE00A154E4 /* JobQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JobQueue.h; path = Backend/JobQueue.h; sourceTree = ""; }; + 5A34D0981AEF75CE00A154E4 /* JobQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JobQueue.m; path = Backend/JobQueue.m; sourceTree = ""; }; 5A391880140A9B10001B4FD7 /* RevealButtonCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RevealButtonCell.m; sourceTree = ""; }; 5A391882140A9B19001B4FD7 /* RevealButtonCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RevealButtonCell.h; sourceTree = ""; }; 5A44976911303B01006EAA56 /* ImageOptim.tar.bz2 */ = {isa = PBXFileReference; explicitFileType = archive; path = ImageOptim.tar.bz2; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -332,183 +550,273 @@ 5A44F4B30CB1868100BD2884 /* PngCrushWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PngCrushWorker.m; sourceTree = ""; }; 5A44F5830CB2ECEB00BD2884 /* CommandWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CommandWorker.m; sourceTree = ""; }; 5A44F5850CB2ECFE00BD2884 /* CommandWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommandWorker.h; sourceTree = ""; }; - 5A45530B1024EB1100A69944 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = en.lproj/MainMenu.xib; sourceTree = ""; }; - 5A45530E1024EB3000A69944 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = en.lproj/PrefsController.xib; sourceTree = ""; }; - 5A4553121024EF3000A69944 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Polish; path = pl.lproj/MainMenu.xib; sourceTree = ""; }; - 5A4553131024EF4100A69944 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Polish; path = pl.lproj/PrefsController.xib; sourceTree = ""; }; + 5A45530B1024EB1100A69944 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Base.lproj/ImageOptim.xib; sourceTree = ""; }; + 5A45530E1024EB3000A69944 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/PrefsController.xib; sourceTree = ""; }; + 5A4553121024EF3000A69944 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Polish; path = pl.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A4553131024EF4100A69944 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = Polish; path = pl.lproj/PrefsController.strings; sourceTree = ""; }; 5A4554F81025EBE900A69944 /* optimal_file_list */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = optimal_file_list; sourceTree = ""; }; 5A48B74A1423F3AD00AE15FB /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; 5A4DC2051028ADB200A9DD55 /* gifsicle.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = gifsicle.xcodeproj; path = ../gifsicle/gifsicle.xcodeproj; sourceTree = SOURCE_ROOT; }; 5A4DC2191028AE1800A9DD55 /* GifsicleWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GifsicleWorker.h; sourceTree = ""; }; 5A4DC21A1028AE1800A9DD55 /* GifsicleWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GifsicleWorker.m; sourceTree = ""; }; - 5A5C29410CB04A0F00FAF446 /* OptiPngWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptiPngWorker.h; sourceTree = ""; }; - 5A5C29420CB04A0F00FAF446 /* OptiPngWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OptiPngWorker.m; sourceTree = ""; }; + 5A5811931AD73A630001838D /* Sparkle.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sparkle.xcodeproj; path = ../Sparkle/Sparkle.xcodeproj; sourceTree = ""; }; + 5A5C29410CB04A0F00FAF446 /* OxiPngWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OxiPngWorker.h; sourceTree = ""; }; + 5A5C29420CB04A0F00FAF446 /* OxiPngWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OxiPngWorker.m; sourceTree = ""; }; + 5A5CD39319662E940096D77F /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; }; + 5A5CD39519662E9A0096D77F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 5A5E8ABF1B6508D9003012E9 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "zh-Hans"; path = "zh-Hans.lproj/Help"; sourceTree = ""; }; + 5A5E8AC21B6508D9003012E9 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; + 5A5E8AC41B6508DA003012E9 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/PrefsController.strings"; sourceTree = ""; }; + 5A5E8B1F1B6509FF003012E9 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/ImageOptim.strings"; sourceTree = ""; }; + 5A5E8B331B650A0F003012E9 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/Localizable.strings; sourceTree = ""; }; + 5A5E8B341B650A2B003012E9 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/PrefsController.strings; sourceTree = ""; }; 5A6242060CA86DC7005942A3 /* PrefsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefsController.h; sourceTree = ""; }; 5A6242070CA86DC7005942A3 /* PrefsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrefsController.m; sourceTree = ""; }; 5A6E04410EA40B6A00380DE7 /* JpegtranWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JpegtranWorker.h; sourceTree = ""; }; 5A6E04420EA40B6A00380DE7 /* JpegtranWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JpegtranWorker.m; sourceTree = ""; }; 5A714AAC0CB0196A00C242C0 /* MyTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyTableView.m; sourceTree = ""; }; + 5A728F191836C0EE004D0D73 /* pngquant.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = pngquant.xcodeproj; path = ../pngquant/pngquant.xcodeproj; sourceTree = ""; }; 5A739C260EA4073700D751E1 /* jpegtran.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = jpegtran.xcodeproj; path = ../jpegtran/jpegtran.xcodeproj; sourceTree = SOURCE_ROOT; }; 5A7A314713E436690012DCFB /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; - 5A7D24F013EDF5F100815AAA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = es; path = es.lproj/Credits.rtf; sourceTree = ""; }; 5A7D24F113EDF5F100815AAA /* es */ = {isa = PBXFileReference; lastKnownFileType = folder; name = es; path = es.lproj/Help; sourceTree = ""; }; 5A7D24F213EDF5F100815AAA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = ""; }; - 5A7D24F313EDF5F100815AAA /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = es.lproj/MainMenu.xib; sourceTree = ""; }; - 5A7D24F413EDF5F100815AAA /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = es.lproj/PrefsController.xib; sourceTree = ""; }; + 5A7D24F313EDF5F100815AAA /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A7D24F413EDF5F100815AAA /* es */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = es; path = es.lproj/PrefsController.strings; sourceTree = ""; }; + 5A7F3D781EB73DA100E94752 /* sk */ = {isa = PBXFileReference; lastKnownFileType = folder; name = sk; path = sk.lproj/Help; sourceTree = ""; }; + 5A7F3D941EB73DA500E94752 /* ro */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ro; path = ro.lproj/Help; sourceTree = ""; }; + 5A7F3D961EB73E0E00E94752 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = ja; path = ja.lproj/Credits.html; sourceTree = ""; }; + 5A7F3DAA1EB73ED800E94752 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = ""; }; + 5A7F3DC21EB73EF300E94752 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/PrefsController.strings; sourceTree = ""; }; + 5A7F3DC31EB73F0000E94752 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A7F3DC41EB73F2E00E94752 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A7F3DC61EB73F3E00E94752 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; + 5A7F3DC71EB73F4700E94752 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/PrefsController.strings; sourceTree = ""; }; + 5A7F3DC81EB7401600E94752 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = ar; path = ar.lproj/Credits.html; sourceTree = ""; }; + 5A7F3E111EB7414800E94752 /* ar */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ar; path = ar.lproj/Help; sourceTree = ""; }; + 5A7F3E121EB7418500E94752 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A7F3E131EB7419400E94752 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/Localizable.strings; sourceTree = ""; }; + 5A7F3E141EB741AB00E94752 /* fi */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fi; path = fi.lproj/Help; sourceTree = ""; }; + 5A7F3E181EB741CB00E94752 /* fi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fi; path = fi.lproj/PrefsController.strings; sourceTree = ""; }; + 5A7F3E191EB741FC00E94752 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A7F3E1A1EB7420700E94752 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/PrefsController.strings; sourceTree = ""; }; + 5A7F3E1B1EB7420B00E94752 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/Localizable.strings; sourceTree = ""; }; + 5A7F3E1C1EB7421700E94752 /* uk */ = {isa = PBXFileReference; lastKnownFileType = folder; name = uk; path = uk.lproj/Help; sourceTree = ""; }; + 5A7FB6D61E2C37DD00481B4A /* SvgoWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SvgoWorker.h; sourceTree = ""; }; + 5A7FB6F21E2C37EB00481B4A /* SvgoWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SvgoWorker.m; sourceTree = ""; }; + 5A7FB7251E2C3E1600481B4A /* svgo.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = svgo.js; path = ../../svgo/build/svgo.js; sourceTree = ""; }; 5A8167EC0EA11F9D00962CF2 /* jpegoptim.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = jpegoptim.xcodeproj; path = ../jpegoptim/jpegoptim.xcodeproj; sourceTree = ""; }; - 5A887F8410C17361006A0687 /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Dutch; path = nl.lproj/Credits.rtf; sourceTree = ""; }; + 5A89F7DA1B64FFBC00F4C0B6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/ImageOptim.strings; sourceTree = ""; }; 5A8A18121416D1D700D62DB7 /* SavingsFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SavingsFormatter.h; sourceTree = ""; }; 5A8A18131416D1D700D62DB7 /* SavingsFormatter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SavingsFormatter.m; sourceTree = ""; }; - 5A8B52D31559C269005AA6E3 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "en-GB"; path = "en-GB.lproj/PrefsController.xib"; sourceTree = ""; }; - 5A8B52D41559C278005AA6E3 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "en-GB"; path = "en-GB.lproj/MainMenu.xib"; sourceTree = ""; }; + 5A8B52D31559C269005AA6E3 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = "en-GB"; path = "en-GB.lproj/PrefsController.strings"; sourceTree = ""; }; + 5A8B52D41559C278005AA6E3 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/ImageOptim.strings"; sourceTree = ""; }; 5A8B52D51559C291005AA6E3 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/Localizable.strings"; sourceTree = ""; }; 5A8B52D61559C29D005AA6E3 /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "en-GB"; path = "en-GB.lproj/Help"; sourceTree = ""; }; - 5A8DFBD710C097A0009A5C8E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Dutch; path = nl.lproj/MainMenu.xib; sourceTree = ""; }; - 5A8DFBD810C097AC009A5C8E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Dutch; path = nl.lproj/PrefsController.xib; sourceTree = ""; }; + 5A8DFBD710C097A0009A5C8E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Dutch; path = nl.lproj/ImageOptim.strings; sourceTree = ""; }; + 5A8DFBD810C097AC009A5C8E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = Dutch; path = nl.lproj/PrefsController.strings; sourceTree = ""; }; 5A8DFBD910C097B9009A5C8E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Dutch; path = nl.lproj/Help; sourceTree = ""; }; 5A8DFBEB10C09812009A5C8E /* Dutch */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Dutch; path = nl.lproj/Localizable.strings; sourceTree = ""; }; - 5A94A00C102757E5005CC9CB /* French */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = French; path = fr.lproj/PrefsController.xib; sourceTree = ""; }; - 5A94A00D102757F0005CC9CB /* French */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = French; path = fr.lproj/MainMenu.xib; sourceTree = ""; }; + 5A93FB491FF1BB2C005D2F27 /* svgcleaner.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = svgcleaner.xcodeproj; path = ../svgcleaner/svgcleaner.xcodeproj; sourceTree = ""; }; + 5A93FCEC1FF1BF1F005D2F27 /* SvgcleanerWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SvgcleanerWorker.h; sourceTree = ""; }; + 5A93FD051FF1BF1F005D2F27 /* SvgcleanerWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SvgcleanerWorker.m; sourceTree = ""; }; + 5A94A00C102757E5005CC9CB /* French */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = French; path = fr.lproj/PrefsController.strings; sourceTree = ""; }; + 5A94A00D102757F0005CC9CB /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = fr.lproj/ImageOptim.strings; sourceTree = ""; }; 5A94A02610275AFD005CC9CB /* fr */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fr; path = fr.lproj/Help; sourceTree = ""; }; 5A94A03B10275E11005CC9CB /* Polish */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = Polish; path = pl.lproj/Localizable.strings; sourceTree = ""; }; 5A94A04D10275F40005CC9CB /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 5A95FEBF0CB8041A00737B79 /* English */ = {isa = PBXFileReference; lastKnownFileType = folder; name = English; path = en.lproj/Help; sourceTree = ""; }; 5A984D4011238E51007622D7 /* advpng.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = advpng.xcodeproj; path = ../advpng/advpng.xcodeproj; sourceTree = SOURCE_ROOT; }; 5A99FE83140AE80600BB2F79 /* Quartz.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Quartz.framework; path = System/Library/Frameworks/Quartz.framework; sourceTree = SDKROOT; }; - 5A9AEC18140996D700C9E97D /* reveal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = reveal.png; sourceTree = ""; }; - 5A9D56BC0E7F242C000F129F /* optipng.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = optipng.xcodeproj; path = ../optipng/optipng.xcodeproj; sourceTree = ""; }; + 5A9D56BC0E7F242C000F129F /* oxipng.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = oxipng.xcodeproj; path = ../oxipng/oxipng.xcodeproj; sourceTree = ""; }; 5A9E5B290CB961E000E05D28 /* JpegoptimWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JpegoptimWorker.h; sourceTree = ""; }; 5A9E5B2A0CB961E000E05D28 /* JpegoptimWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JpegoptimWorker.m; sourceTree = ""; }; 5A9ED38015F2213F005B8CA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ja; path = ja.lproj/Help; sourceTree = ""; }; - 5A9ED38215F2214F005B8CA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ja; path = ja.lproj/PrefsController.xib; sourceTree = ""; }; - 5A9ED38415F22153005B8CA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = ja; path = ja.lproj/MainMenu.xib; sourceTree = ""; }; + 5A9ED38215F2214F005B8CA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = ja; path = ja.lproj/PrefsController.strings; sourceTree = ""; }; + 5A9ED38415F22153005B8CA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/ImageOptim.strings; sourceTree = ""; }; 5A9ED38615F22159005B8CA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; - 5A9ED38815F22199005B8CA5 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = ja; path = ja.lproj/Credits.rtf; sourceTree = ""; }; 5A9EE4490CB59CDC00F08CC5 /* err.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = err.png; sourceTree = ""; }; 5A9EE44A0CB59CDC00F08CC5 /* noopt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = noopt.png; sourceTree = ""; }; 5A9EE44B0CB59CDC00F08CC5 /* ok.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ok.png; sourceTree = ""; }; 5A9EE44C0CB59CDC00F08CC5 /* wait.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = wait.png; sourceTree = ""; }; 5A9EE4720CB59EC100F08CC5 /* progress.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = progress.png; sourceTree = ""; }; - 5AA2213210DE9CD500D67435 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Italian; path = it.lproj/Credits.rtf; sourceTree = ""; }; 5AA2213310DE9CEF00D67435 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = it.lproj/Localizable.strings; sourceTree = ""; }; - 5AA2213E10DE9CF900D67435 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Italian; path = it.lproj/MainMenu.xib; sourceTree = ""; }; - 5AA2213F10DE9D0100D67435 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Italian; path = it.lproj/PrefsController.xib; sourceTree = ""; }; - 5AA338A21117BF1900046C79 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = German; path = de.lproj/Credits.rtf; sourceTree = ""; }; + 5AA2213E10DE9CF900D67435 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Italian; path = it.lproj/ImageOptim.strings; sourceTree = ""; }; + 5AA2213F10DE9D0100D67435 /* Italian */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = Italian; path = it.lproj/PrefsController.strings; sourceTree = ""; }; 5AA338A31117BF5500046C79 /* German */ = {isa = PBXFileReference; lastKnownFileType = folder; name = German; path = de.lproj/Help; sourceTree = ""; }; 5AA338BF1117C00300046C79 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = de.lproj/Localizable.strings; sourceTree = ""; }; - 5AA339011117C41400046C79 /* German */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = German; path = de.lproj/MainMenu.xib; sourceTree = ""; }; - 5AA339021117C41B00046C79 /* German */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = German; path = de.lproj/PrefsController.xib; sourceTree = ""; }; - 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = Sparkle.xcodeproj; path = ../../Sparkle/Sparkle.xcodeproj; sourceTree = ""; }; - 5AACA1360CAF23FF004D45CA /* DirWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DirWorker.h; sourceTree = ""; }; - 5AACA1370CAF23FF004D45CA /* DirWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DirWorker.m; sourceTree = ""; }; + 5AA339011117C41400046C79 /* German */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = German; path = de.lproj/ImageOptim.strings; sourceTree = ""; }; + 5AA339021117C41B00046C79 /* German */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = German; path = de.lproj/PrefsController.strings; sourceTree = ""; }; + 5AA9F4361899D063006C64C8 /* PngquantWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PngquantWorker.h; sourceTree = ""; }; + 5AA9F4371899D063006C64C8 /* PngquantWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PngquantWorker.m; sourceTree = ""; }; + 5AA9F5F5189339A500697D8E /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; + 5AA9F7701893736100697D8E /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/ImageOptim.strings; sourceTree = ""; }; + 5AA9F781189373AB00697D8E /* tr */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = tr; path = tr.lproj/PrefsController.strings; sourceTree = ""; }; + 5AA9F7821893743B00697D8E /* cs */ = {isa = PBXFileReference; lastKnownFileType = folder; name = cs; path = cs.lproj/Help; sourceTree = ""; }; + 5AA9F7831893744800697D8E /* el */ = {isa = PBXFileReference; lastKnownFileType = folder; name = el; path = el.lproj/Help; sourceTree = ""; }; + 5AA9F7841893746300697D8E /* it */ = {isa = PBXFileReference; lastKnownFileType = folder; name = it; path = it.lproj/Help; sourceTree = ""; }; + 5AA9F7851893746E00697D8E /* tr */ = {isa = PBXFileReference; lastKnownFileType = folder; name = tr; path = tr.lproj/Help; sourceTree = ""; }; + 5AA9F7861893747900697D8E /* vi */ = {isa = PBXFileReference; lastKnownFileType = folder; name = vi; path = vi.lproj/Help; sourceTree = ""; }; + 5AA9F799189374A000697D8E /* pl */ = {isa = PBXFileReference; lastKnownFileType = folder; name = pl; path = pl.lproj/Help; sourceTree = ""; }; + 5AA9F7A9189374BF00697D8E /* el */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = el; path = el.lproj/PrefsController.strings; sourceTree = ""; }; + 5AACA1360CAF23FF004D45CA /* DirScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirScanner.h; path = Backend/DirScanner.h; sourceTree = ""; }; + 5AACA1370CAF23FF004D45CA /* DirScanner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirScanner.m; path = Backend/DirScanner.m; sourceTree = ""; }; 5AACA13D0CAF241B004D45CA /* Worker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Worker.h; sourceTree = ""; }; 5AACA13E0CAF241B004D45CA /* Worker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Worker.m; sourceTree = ""; }; - 5AACA3830CAF3DA5004D45CA /* minus.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = minus.png; sourceTree = ""; }; - 5AACA3840CAF3DA5004D45CA /* plus.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = plus.png; sourceTree = ""; }; 5AACA7BA0CAFD0D2004D45CA /* MyTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyTableView.h; sourceTree = ""; }; 5AACA80F0CAFE3CA004D45CA /* ImageOptim.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = ImageOptim.icns; sourceTree = ""; }; 5AACA82F0CAFE74E004D45CA /* Transformers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Transformers.h; sourceTree = ""; }; 5AACA8300CAFE74E004D45CA /* Transformers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Transformers.m; sourceTree = ""; }; - 5ABF610813E37AFC009F6F22 /* da */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = da; path = da.lproj/PrefsController.xib; sourceTree = ""; }; - 5ABF610913E37B07009F6F22 /* da */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = da; path = da.lproj/MainMenu.xib; sourceTree = ""; }; - 5ABF610A13E37B5F009F6F22 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = da; path = da.lproj/Credits.rtf; sourceTree = ""; }; + 5AB81F931AE1BE1300719AB7 /* Save.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Save.h; sourceTree = ""; }; + 5AB81F941AE1BE1300719AB7 /* Save.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Save.m; sourceTree = ""; }; + 5ABE15421AE5072300861C6B /* ImageOptimGPL.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImageOptimGPL.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5ABE15451AE5072300861C6B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5ABE154C1AE5072300861C6B /* BackendTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BackendTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 5ABE15541AE5072300861C6B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5ABE15551AE5072300861C6B /* BackendTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BackendTests.m; sourceTree = ""; }; + 5ABE16D11AE5AD9F00861C6B /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = log.c; path = Backend/log.c; sourceTree = ""; }; + 5ABF610813E37AFC009F6F22 /* da */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = da; path = da.lproj/PrefsController.strings; sourceTree = ""; }; + 5ABF610913E37B07009F6F22 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/ImageOptim.strings; sourceTree = ""; }; 5ABF611313E37B86009F6F22 /* da */ = {isa = PBXFileReference; lastKnownFileType = folder; name = da; path = da.lproj/Help; sourceTree = ""; }; 5ABF611613E37BC3009F6F22 /* da */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = da; path = da.lproj/Localizable.strings; sourceTree = ""; }; + 5AC4CC101AF445480003AEA2 /* ImageOptim.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = ImageOptim.entitlements; sourceTree = ""; }; 5AC63C490E9ABF0A0053B879 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; - 5AC98826155F1ACD00E221A0 /* sv */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = sv; path = sv.lproj/MainMenu.xib; sourceTree = ""; }; - 5AC98827155F1ACD00E221A0 /* sv */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = sv; path = sv.lproj/PrefsController.xib; sourceTree = ""; }; - 5AC9882A155F1AE100E221A0 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = sv; path = sv.lproj/Credits.rtf; sourceTree = ""; }; + 5AC64EC11AF3FCFE0032AA7F /* unoptimized.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = unoptimized.png; sourceTree = ""; }; + 5AC64EFE1AF3FDEE0032AA7F /* ImageOptimize.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ImageOptimize.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 5AC64F011AF3FDEE0032AA7F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5AC64F041AF3FDEE0032AA7F /* ImageOptimize.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = ImageOptimize.entitlements; sourceTree = ""; }; + 5AC64F051AF3FDEE0032AA7F /* ExtensionController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExtensionController.h; sourceTree = ""; }; + 5AC64F061AF3FDEE0032AA7F /* ExtensionController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExtensionController.m; sourceTree = ""; }; + 5AC64F081AF3FDEE0032AA7F /* ExtensionController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ExtensionController.xib; sourceTree = ""; }; + 5AC98826155F1ACD00E221A0 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/ImageOptim.strings; sourceTree = ""; }; + 5AC98827155F1ACD00E221A0 /* sv */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = sv; path = sv.lproj/PrefsController.strings; sourceTree = ""; }; 5AC9882B155F1AE100E221A0 /* sv */ = {isa = PBXFileReference; lastKnownFileType = folder; name = sv; path = sv.lproj/Help; sourceTree = ""; }; 5AC9882C155F1AE100E221A0 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Localizable.strings; sourceTree = ""; }; - 5AD299B71436756D0048C725 /* no */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = no; path = no.lproj/Credits.rtf; sourceTree = ""; }; + 5ACCB3F117A828FF00853EFE /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/ImageOptim.strings; sourceTree = ""; }; + 5ACCB3F417A8292500853EFE /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/ImageOptim.strings; sourceTree = ""; }; + 5ACCB3F517A8292500853EFE /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/ImageOptim.strings; sourceTree = ""; }; + 5ACCB3F617A8294900853EFE /* cs */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = cs; path = cs.lproj/PrefsController.strings; sourceTree = ""; }; + 5ACCB3FA17A8294900853EFE /* vi */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = vi; path = vi.lproj/PrefsController.strings; sourceTree = ""; }; + 5ACCB41917A82E3100853EFE /* cs */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = cs; path = cs.lproj/Localizable.strings; sourceTree = ""; }; + 5ACCB41A17A82E3100853EFE /* el */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = el; path = el.lproj/Localizable.strings; sourceTree = ""; }; + 5ACCB41C17A82E3100853EFE /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = ""; }; + 5ACCB41D17A82E3100853EFE /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/Localizable.strings; sourceTree = ""; }; + 5AD033511E26B6840030291A /* File.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = File.h; path = Backend/File.h; sourceTree = ""; }; + 5AD033521E26B6840030291A /* File.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = File.m; path = Backend/File.m; sourceTree = ""; }; + 5AD0347A1E27185D0030291A /* TempFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TempFile.h; path = Backend/TempFile.h; sourceTree = ""; }; + 5AD0347B1E27185D0030291A /* TempFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TempFile.m; path = Backend/TempFile.m; sourceTree = ""; }; 5AD299B9143675770048C725 /* no */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = no; path = no.lproj/Localizable.strings; sourceTree = ""; }; - 5AD299BB1436757F0048C725 /* no */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = no; path = no.lproj/MainMenu.xib; sourceTree = ""; }; - 5AD299BD143675870048C725 /* no */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = no; path = no.lproj/PrefsController.xib; sourceTree = ""; }; + 5AD299BB1436757F0048C725 /* no */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = no; path = no.lproj/ImageOptim.strings; sourceTree = ""; }; + 5AD299BD143675870048C725 /* no */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = no; path = no.lproj/PrefsController.strings; sourceTree = ""; }; 5AD299C2143675BB0048C725 /* no */ = {isa = PBXFileReference; lastKnownFileType = folder; name = no; path = no.lproj/Help; sourceTree = ""; }; - 5AD3032010D555E4002A5558 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = en.lproj/Credits.rtf; sourceTree = ""; }; - 5AD3032110D555ED002A5558 /* Polish */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = Polish; path = pl.lproj/Credits.rtf; sourceTree = ""; }; - 5AD3032210D555F7002A5558 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = French; path = fr.lproj/Credits.rtf; sourceTree = ""; }; - 5AE1C4980CA6CDDC000CF636 /* FilesQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilesQueue.h; sourceTree = ""; }; - 5AE1C4990CA6CDDC000CF636 /* FilesQueue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FilesQueue.m; sourceTree = ""; }; + 5AE1C4980CA6CDDC000CF636 /* FilesController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilesController.h; sourceTree = ""; }; + 5AE1C4990CA6CDDC000CF636 /* FilesController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FilesController.m; sourceTree = ""; }; 5AE54D800CAEE8AC00903DF4 /* defaults.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = defaults.plist; sourceTree = ""; }; 5AE54DED0CAEF56100903DF4 /* PngoutWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PngoutWorker.h; sourceTree = ""; }; 5AE54DEE0CAEF56100903DF4 /* PngoutWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PngoutWorker.m; sourceTree = ""; }; 5AE54E1F0CAF16D800903DF4 /* AdvCompWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdvCompWorker.h; sourceTree = ""; }; 5AE54E200CAF16D800903DF4 /* AdvCompWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdvCompWorker.m; sourceTree = ""; }; 5AE74B57146DEC8700287FA6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/Localizable.strings"; sourceTree = ""; }; - 5AE74B5C146DECA300287FA6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "pt-BR"; path = "pt-BR.lproj/MainMenu.xib"; sourceTree = ""; }; - 5AE74B5E146DECAA00287FA6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "pt-BR"; path = "pt-BR.lproj/PrefsController.xib"; sourceTree = ""; }; + 5AE74B5C146DECA300287FA6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/ImageOptim.strings"; sourceTree = ""; }; + 5AE74B5E146DECAA00287FA6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/PrefsController.strings"; sourceTree = ""; }; 5AE74B60146DECB100287FA6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "pt-BR"; path = "pt-BR.lproj/Help"; sourceTree = ""; }; - 5AE74B62146DECB800287FA6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = "pt-BR"; path = "pt-BR.lproj/Credits.rtf"; sourceTree = ""; }; + 5AE9755E17AD5BE20037C2E2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = ru; path = ru.lproj/Credits.html; sourceTree = ""; }; 5AEF1B1D10F2BCA900E3E4F0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 5AEF1B2110F2BCB200E3E4F0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 5AF71642174AF7C30018D3FE /* pngout */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = pngout; path = ../pngout; sourceTree = ""; }; + 5AF8536A1B49F21C00CF76F5 /* FadeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FadeView.h; sourceTree = ""; }; + 5AF8536B1B49F21C00CF76F5 /* FadeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FadeView.m; sourceTree = ""; }; + 5FD569DB21A059A000BC9F82 /* JobProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JobProxy.h; sourceTree = ""; }; + 5FD569DC21A059A000BC9F82 /* JobProxy.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = JobProxy.m; sourceTree = ""; }; 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; explicitFileType = text.plist.xml; fileEncoding = 4; path = Info.plist; sourceTree = ""; }; 8D1107320486CEB800E47090 /* ImageOptim.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ImageOptim.app; sourceTree = BUILT_PRODUCTS_DIR; }; + D047E4491E7C3CE70036F96B /* GuetzliWorker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GuetzliWorker.h; sourceTree = ""; }; + D047E4641E7C3D7C0036F96B /* GuetzliWorker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GuetzliWorker.m; sourceTree = ""; }; + D047E47C1E7D7DF00036F96B /* guetzli.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = guetzli.xcodeproj; path = ../guetzli/guetzli.xcodeproj; sourceTree = ""; }; + F8C4ABCD1755C91B004FC041 /* ko */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ko; path = ko.lproj/Help; sourceTree = ""; }; + F8C4ABCF1755C91B004FC041 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = ""; }; + F8C4ABD01755C91B004FC041 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/ImageOptim.strings; sourceTree = ""; }; + F8C4ABD11755C91B004FC041 /* ko */ = {isa = PBXFileReference; lastKnownFileType = file.plist.strings; name = ko; path = ko.lproj/PrefsController.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 5ABE153E1AE5072300861C6B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5ABE161C1AE508F400861C6B /* AppKit.framework in Frameworks */, + 5ABE161D1AE508FA00861C6B /* Foundation.framework in Frameworks */, + 5ABE161B1AE508E600861C6B /* libsqlite3.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5ABE15491AE5072300861C6B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5ABE154D1AE5072300861C6B /* ImageOptimGPL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5AC64EFB1AF3FDEE0032AA7F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5AC4CBB31AF3FFA10003AEA2 /* ImageOptimGPL.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8D11072E0486CEB800E47090 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, + 5A5CD39419662E940096D77F /* AppKit.framework in Frameworks */, + 5A5CD39619662E9A0096D77F /* Foundation.framework in Frameworks */, + 5ABE15591AE5072300861C6B /* ImageOptimGPL.framework in Frameworks */, 5A99FE84140AE80600BB2F79 /* Quartz.framework in Frameworks */, - 5AA6D2511503EA29006DDB3E /* Sparkle.framework in Frameworks */, + 5A5811AB1AD73A990001838D /* Sparkle.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 080E96DDFE201D6D7F000001 /* Classes */ = { + 080E96DDFE201D6D7F000001 /* Backend */ = { isa = PBXGroup; children = ( + 5ABE15441AE5072300861C6B /* Supporting Files */, + 5ABE15521AE5072300861C6B /* Tests */, 5AE54DE50CAEF51300903DF4 /* Workers */, - 5A34A632140EEDB900DE44D2 /* DragDropImageView.h */, - 5A34A633140EEDB900DE44D2 /* DragDropImageView.m */, - 5A0D2E550C922AB700FD7CDE /* File.h */, - 5A0D2E560C922AB700FD7CDE /* File.m */, - 5AE1C4980CA6CDDC000CF636 /* FilesQueue.h */, - 5AE1C4990CA6CDDC000CF636 /* FilesQueue.m */, - 5A0D2E5B0C922D6D00FD7CDE /* ImageOptim.h */, - 5A0D2E5C0C922D6D00FD7CDE /* ImageOptim.m */, - 5AACA7BA0CAFD0D2004D45CA /* MyTableView.h */, - 5A714AAC0CB0196A00C242C0 /* MyTableView.m */, - 5A6242060CA86DC7005942A3 /* PrefsController.h */, - 5A6242070CA86DC7005942A3 /* PrefsController.m */, - 5A391882140A9B19001B4FD7 /* RevealButtonCell.h */, - 5A391880140A9B10001B4FD7 /* RevealButtonCell.m */, + 5AACA1360CAF23FF004D45CA /* DirScanner.h */, + 5AACA1370CAF23FF004D45CA /* DirScanner.m */, + 5AD033511E26B6840030291A /* File.h */, + 5AD033521E26B6840030291A /* File.m */, + 5A34CFEE1AEF6D9800A154E4 /* ImageOptimGPL.h */, + 5A0D2E550C922AB700FD7CDE /* Job.h */, + 5A0D2E560C922AB700FD7CDE /* Job.m */, + 5A34D0971AEF75CE00A154E4 /* JobQueue.h */, + 5A34D0981AEF75CE00A154E4 /* JobQueue.m */, + 5ABE16D11AE5AD9F00861C6B /* log.c */, + 5AA9F5F5189339A500697D8E /* log.h */, + 5A08FE901936982E001DA24B /* ResultsDb.h */, + 5A08FE911936982E001DA24B /* ResultsDb.m */, 5A8A18121416D1D700D62DB7 /* SavingsFormatter.h */, 5A8A18131416D1D700D62DB7 /* SavingsFormatter.m */, - 5AACA82F0CAFE74E004D45CA /* Transformers.h */, - 5AACA8300CAFE74E004D45CA /* Transformers.m */, + 5A1F3D001B4897B3006570E0 /* SharedPrefs.h */, + 5A1F3CEE1B489796006570E0 /* SharedPrefs.m */, + 5AD0347A1E27185D0030291A /* TempFile.h */, + 5AD0347B1E27185D0030291A /* TempFile.m */, ); - name = Classes; - sourceTree = ""; - }; - 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { - isa = PBXGroup; - children = ( - 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, - ); - name = "Linked Frameworks"; - sourceTree = ""; - }; - 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - 29B97324FDCFA39411CA2CEA /* AppKit.framework */, - 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, - 29B97325FDCFA39411CA2CEA /* Foundation.framework */, - ); - name = "Other Frameworks"; + name = Backend; sourceTree = ""; }; 19C28FACFE9D520D11CA2CBB /* Products */ = { isa = PBXGroup; children = ( + 5ABE154C1AE5072300861C6B /* BackendTests.xctest */, 8D1107320486CEB800E47090 /* ImageOptim.app */, 5A44976911303B01006EAA56 /* ImageOptim.tar.bz2 */, + 5ABE15421AE5072300861C6B /* ImageOptimGPL.framework */, + 5AC64EFE1AF3FDEE0032AA7F /* ImageOptimize.appex */, ); name = Products; sourceTree = ""; @@ -516,10 +824,11 @@ 29B97314FDCFA39411CA2CEA /* ImageOptim */ = { isa = PBXGroup; children = ( - 080E96DDFE201D6D7F000001 /* Classes */, + 080E96DDFE201D6D7F000001 /* Backend */, + 5ABD7B881AE45FEA00E7AB4B /* Frontend */, 29B97315FDCFA39411CA2CEA /* Other Sources */, - 5A09013A0ED8D68200F3965B /* Sparkle */, 29B97317FDCFA39411CA2CEA /* Resources */, + 5AC64EFF1AF3FDEE0032AA7F /* Extension */, 29B97323FDCFA39411CA2CEA /* Frameworks */, 19C28FACFE9D520D11CA2CBB /* Products */, ); @@ -531,17 +840,24 @@ children = ( 5A48B74A1423F3AD00AE15FB /* Makefile */, 5A4554F81025EBE900A69944 /* optimal_file_list */, + 5AF9013A0ED8D68200F3965B /* Sparkle */, 5A984D4011238E51007622D7 /* advpng.xcodeproj */, 5A27B9C2139B079A0095FC2F /* debug.xcconfig */, 5A4DC2051028ADB200A9DD55 /* gifsicle.xcodeproj */, + D047E47C1E7D7DF00036F96B /* guetzli.xcodeproj */, + 5AC4CC101AF445480003AEA2 /* ImageOptim.entitlements */, + 1AD5B24D174F84C600BC75FD /* ImageOptimVerbs.sdef */, 5A20CC9D112393B80000400D /* jpeg.xcodeproj */, 5A8167EC0EA11F9D00962CF2 /* jpegoptim.xcodeproj */, 5A739C260EA4073700D751E1 /* jpegtran.xcodeproj */, 5A20CC8E1123939C0000400D /* libpng.xcodeproj */, 29B97316FDCFA39411CA2CEA /* main.m */, - 5A9D56BC0E7F242C000F129F /* optipng.xcodeproj */, + 5A9D56BC0E7F242C000F129F /* oxipng.xcodeproj */, 5A1943390FF97F86007C3324 /* pngcrush.xcodeproj */, + 5A728F191836C0EE004D0D73 /* pngquant.xcodeproj */, 5A27B956139B03090095FC2F /* release.xcconfig */, + 5A93FB491FF1BB2C005D2F27 /* svgcleaner.xcodeproj */, + 5A1EBE7617908DC300361F08 /* zopfli-png.xcodeproj */, ); name = "Other Sources"; sourceTree = ""; @@ -550,24 +866,26 @@ isa = PBXGroup; children = ( 5A95FEBE0CB8041A00737B79 /* Help */, - 5A0FA76114A7EFCB008FA381 /* pngout */, - 5A887F8310C17361006A0687 /* Credits.rtf */, + 1ACFBA191799E9CC006D93B2 /* Credits.html */, 5AE54D800CAEE8AC00903DF4 /* defaults.plist */, 5AC63C490E9ABF0A0053B879 /* dsa_pub.pem */, 5A9EE4490CB59CDC00F08CC5 /* err.png */, + 5A0A24FC17495224003264CC /* err@2x.png */, 5AACA80F0CAFE3CA004D45CA /* ImageOptim.icns */, + 5A45530A1024EB1100A69944 /* ImageOptim.xib */, 8D1107310486CEB800E47090 /* Info.plist */, + 5A2E55861A7C386900985295 /* InfoPlist.strings */, 5A94A03A10275E11005CC9CB /* Localizable.strings */, - 5A45530A1024EB1100A69944 /* MainMenu.xib */, - 5AACA3830CAF3DA5004D45CA /* minus.png */, 5A9EE44A0CB59CDC00F08CC5 /* noopt.png */, + 5A0A24F217494254003264CC /* noopt@2x.png */, 5A9EE44B0CB59CDC00F08CC5 /* ok.png */, - 5AACA3840CAF3DA5004D45CA /* plus.png */, + 5A0A24EF17492D39003264CC /* ok@2x.png */, 5A45530D1024EB3000A69944 /* PrefsController.xib */, 5A9EE4720CB59EC100F08CC5 /* progress.png */, - 5A9AEC18140996D700C9E97D /* reveal.png */, + 5A0A24F417494254003264CC /* progress@2x.png */, 5A1D3E8B14366933004EE809 /* style.css */, 5A9EE44C0CB59CDC00F08CC5 /* wait.png */, + 5A0A24F517494254003264CC /* wait@2x.png */, ); name = Resources; sourceTree = ""; @@ -575,37 +893,36 @@ 29B97323FDCFA39411CA2CEA /* Frameworks */ = { isa = PBXGroup; children = ( - 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, - 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, + 5A5CD39319662E940096D77F /* AppKit.framework */, 5AEF1B1D10F2BCA900E3E4F0 /* AppKit.framework */, + 5A5CD39519662E9A0096D77F /* Foundation.framework */, 5AEF1B2110F2BCB200E3E4F0 /* Foundation.framework */, + 5A08FDAF1933D635001DA24B /* libsqlite3.dylib */, 5A99FE83140AE80600BB2F79 /* Quartz.framework */, ); name = Frameworks; sourceTree = ""; }; - 5A09013A0ED8D68200F3965B /* Sparkle */ = { + 5A19433A0FF97F86007C3324 /* Products */ = { isa = PBXGroup; children = ( - 5A09013F0ED8D6AA00F3965B /* appcast.xml */, - 5A0901400ED8D6B800F3965B /* sparkle.sig */, - 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */, + 5A1943450FF97F86007C3324 /* pngcrush */, ); - name = Sparkle; + name = Products; sourceTree = ""; }; - 5A19433A0FF97F86007C3324 /* Products */ = { + 5A1943640FF980B3007C3324 /* Products */ = { isa = PBXGroup; children = ( - 5A1943450FF97F86007C3324 /* pngcrush */, + 5F75B47527583B9B0072F27A /* oxipng */, ); name = Products; sourceTree = ""; }; - 5A1943640FF980B3007C3324 /* Products */ = { + 5A1EBECF17908F8200361F08 /* Products */ = { isa = PBXGroup; children = ( - 5A1943680FF980B3007C3324 /* optipng */, + 5A1EBED317908F8200361F08 /* zopflipng */, ); name = Products; sourceTree = ""; @@ -635,6 +952,25 @@ name = Products; sourceTree = ""; }; + 5A5811941AD73A630001838D /* Products */ = { + isa = PBXGroup; + children = ( + 5A5811AF1BD73A640001838D /* Sparkle.framework */, + 5A5811A81AD73A640001838D /* Sparkle Test App.app */, + 5A5811A91AD73A640001838D /* Sparkle Unit Tests.xctest */, + 5A5811A51AD73A640001838D /* BinaryDelta */, + 5A5811A71AD73A640001838D /* Autoupdate.app */, + 5ADDF2FF1CE613A800B4AD58 /* UI Tests.xctest */, + D047E4601E7C3CE80036F96B /* fileop */, + D047E4621E7C3CE80036F96B /* generate_appcast */, + 5FFC96B8275842290035D0A2 /* generate_keys */, + 5FFC96BA275842290035D0A2 /* sign_update */, + 5FFC96BC275842290035D0A2 /* libbsdiff.a */, + 5FFC96BE275842290035D0A2 /* libed25519.a */, + ); + name = Products; + sourceTree = ""; + }; 5A62DB03111CCE9F008848D0 /* Products */ = { isa = PBXGroup; children = ( @@ -643,15 +979,30 @@ name = Products; sourceTree = ""; }; + 5A728F1A1836C0EE004D0D73 /* Products */ = { + isa = PBXGroup; + children = ( + 5F9163392ADB7A7B00230D34 /* pngquant */, + ); + name = Products; + sourceTree = ""; + }; 5A739C270EA4073700D751E1 /* Products */ = { isa = PBXGroup; children = ( - 5A8594E71460BCF20044095A /* jpegrescan */, 5A739C2B0EA4073700D751E1 /* jpegtran */, ); name = Products; sourceTree = ""; }; + 5A93FB4A1FF1BB2C005D2F27 /* Products */ = { + isa = PBXGroup; + children = ( + 5FFC9750275843160035D0A2 /* svgcleaner */, + ); + name = Products; + sourceTree = ""; + }; 5A984D4111238E51007622D7 /* Products */ = { isa = PBXGroup; children = ( @@ -660,15 +1011,82 @@ name = Products; sourceTree = ""; }; - 5AA6D23C1503E9F5006DDB3E /* Products */ = { + 5ABD7B881AE45FEA00E7AB4B /* Frontend */ = { isa = PBXGroup; children = ( - 5AA6D24D1503E9F6006DDB3E /* finish_installation.app */, - 5AA6D2491503E9F6006DDB3E /* Sparkle Test App.app */, - 5AA6D24B1503E9F6006DDB3E /* Sparkle Unit Tests.octest */, - 5AA6D2471503E9F6006DDB3E /* Sparkle.framework */, + 5A34A632140EEDB900DE44D2 /* DragDropImageView.h */, + 5A34A633140EEDB900DE44D2 /* DragDropImageView.m */, + 5AF8536A1B49F21C00CF76F5 /* FadeView.h */, + 5AF8536B1B49F21C00CF76F5 /* FadeView.m */, + 5AE1C4980CA6CDDC000CF636 /* FilesController.h */, + 5AE1C4990CA6CDDC000CF636 /* FilesController.m */, + 1AD5B24F174F850900BC75FD /* GetQueueCountCommand.h */, + 1AD5B250174F850900BC75FD /* GetQueueCountCommand.m */, + 5A0D2E5B0C922D6D00FD7CDE /* ImageOptimController.h */, + 5A0D2E5C0C922D6D00FD7CDE /* ImageOptimController.m */, + 5FD569DB21A059A000BC9F82 /* JobProxy.h */, + 5FD569DC21A059A000BC9F82 /* JobProxy.m */, + 5AACA7BA0CAFD0D2004D45CA /* MyTableView.h */, + 5A714AAC0CB0196A00C242C0 /* MyTableView.m */, + 5A6242060CA86DC7005942A3 /* PrefsController.h */, + 5A6242070CA86DC7005942A3 /* PrefsController.m */, + 5A391882140A9B19001B4FD7 /* RevealButtonCell.h */, + 5A391880140A9B10001B4FD7 /* RevealButtonCell.m */, + 5AACA82F0CAFE74E004D45CA /* Transformers.h */, + 5AACA8300CAFE74E004D45CA /* Transformers.m */, ); - name = Products; + name = Frontend; + sourceTree = ""; + }; + 5ABE15441AE5072300861C6B /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 5AF71642174AF7C30018D3FE /* pngout */, + 5ABE15451AE5072300861C6B /* Info.plist */, + 5A7FB7251E2C3E1600481B4A /* svgo.js */, + ); + name = "Supporting Files"; + path = Backend; + sourceTree = ""; + }; + 5ABE15521AE5072300861C6B /* Tests */ = { + isa = PBXGroup; + children = ( + 5ABE15531AE5072300861C6B /* Supporting Files */, + 5ABE15551AE5072300861C6B /* BackendTests.m */, + ); + name = Tests; + path = Backend/Tests; + sourceTree = ""; + }; + 5ABE15531AE5072300861C6B /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 5ABE15541AE5072300861C6B /* Info.plist */, + 5AC64EC11AF3FCFE0032AA7F /* unoptimized.png */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 5AC64EFF1AF3FDEE0032AA7F /* Extension */ = { + isa = PBXGroup; + children = ( + 5AC64F001AF3FDEE0032AA7F /* Supporting Files */, + 5AC64F051AF3FDEE0032AA7F /* ExtensionController.h */, + 5AC64F061AF3FDEE0032AA7F /* ExtensionController.m */, + 5AC64F081AF3FDEE0032AA7F /* ExtensionController.xib */, + ); + name = Extension; + path = ImageOptimize; + sourceTree = ""; + }; + 5AC64F001AF3FDEE0032AA7F /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 5AC64F041AF3FDEE0032AA7F /* ImageOptimize.entitlements */, + 5AC64F011AF3FDEE0032AA7F /* Info.plist */, + ); + name = "Supporting Files"; sourceTree = ""; }; 5AE54DE50CAEF51300903DF4 /* Workers */ = { @@ -678,28 +1096,71 @@ 5AE54E200CAF16D800903DF4 /* AdvCompWorker.m */, 5A44F5850CB2ECFE00BD2884 /* CommandWorker.h */, 5A44F5830CB2ECEB00BD2884 /* CommandWorker.m */, - 5AACA1360CAF23FF004D45CA /* DirWorker.h */, - 5AACA1370CAF23FF004D45CA /* DirWorker.m */, 5A4DC2191028AE1800A9DD55 /* GifsicleWorker.h */, 5A4DC21A1028AE1800A9DD55 /* GifsicleWorker.m */, + D047E4491E7C3CE70036F96B /* GuetzliWorker.h */, + D047E4641E7C3D7C0036F96B /* GuetzliWorker.m */, 5A9E5B290CB961E000E05D28 /* JpegoptimWorker.h */, 5A9E5B2A0CB961E000E05D28 /* JpegoptimWorker.m */, 5A6E04410EA40B6A00380DE7 /* JpegtranWorker.h */, 5A6E04420EA40B6A00380DE7 /* JpegtranWorker.m */, - 5A5C29410CB04A0F00FAF446 /* OptiPngWorker.h */, - 5A5C29420CB04A0F00FAF446 /* OptiPngWorker.m */, + 5A5C29410CB04A0F00FAF446 /* OxiPngWorker.h */, + 5A5C29420CB04A0F00FAF446 /* OxiPngWorker.m */, 5A44F4B20CB1868100BD2884 /* PngCrushWorker.h */, 5A44F4B30CB1868100BD2884 /* PngCrushWorker.m */, 5AE54DED0CAEF56100903DF4 /* PngoutWorker.h */, 5AE54DEE0CAEF56100903DF4 /* PngoutWorker.m */, + 5AA9F4361899D063006C64C8 /* PngquantWorker.h */, + 5AA9F4371899D063006C64C8 /* PngquantWorker.m */, + 5AB81F931AE1BE1300719AB7 /* Save.h */, + 5AB81F941AE1BE1300719AB7 /* Save.m */, + 5A93FCEC1FF1BF1F005D2F27 /* SvgcleanerWorker.h */, + 5A93FD051FF1BF1F005D2F27 /* SvgcleanerWorker.m */, + 5A7FB6D61E2C37DD00481B4A /* SvgoWorker.h */, + 5A7FB6F21E2C37EB00481B4A /* SvgoWorker.m */, 5AACA13D0CAF241B004D45CA /* Worker.h */, 5AACA13E0CAF241B004D45CA /* Worker.m */, + 5A2ACD121790935C004992B7 /* ZopfliWorker.h */, + 5A2ACD131790935C004992B7 /* ZopfliWorker.m */, ); - path = Workers; + name = Workers; + path = Backend/Workers; + sourceTree = ""; + }; + 5AF9013A0ED8D68200F3965B /* Sparkle */ = { + isa = PBXGroup; + children = ( + 5A09013F0ED8D6AA00F3965B /* appcast.xml */, + 5A5811931AD73A630001838D /* Sparkle.xcodeproj */, + ); + name = Sparkle; + sourceTree = ""; + }; + D047E4821E7D7E310036F96B /* Products */ = { + isa = PBXGroup; + children = ( + D047E4861E7D7E310036F96B /* guetzli */, + ); + name = Products; sourceTree = ""; }; /* End PBXGroup section */ +/* Begin PBXHeadersBuildPhase section */ + 5ABE153F1AE5072300861C6B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 5AD033531E26B6840030291A /* File.h in Headers */, + 5A34D0041AEF6DB300A154E4 /* ImageOptimGPL.h in Headers */, + 5A34D0991AEF75CE00A154E4 /* JobQueue.h in Headers */, + 5A7FB6D71E2C37DD00481B4A /* SvgoWorker.h in Headers */, + 5AD0347C1E27185D0030291A /* TempFile.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + /* Begin PBXLegacyTarget section */ 5A453F8D16BE79A7002AFE23 /* downloads */ = { isa = PBXLegacyTarget; @@ -715,33 +1176,108 @@ passBuildSettingsInEnvironment = 1; productName = downloads; }; + 5A7FB7051E2C39CC00481B4A /* SVGO */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "$(ACTION)"; + buildConfigurationList = 5A7FB71E1E2C39CC00481B4A /* Build configuration list for PBXLegacyTarget "SVGO" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/make; + dependencies = ( + ); + name = SVGO; + passBuildSettingsInEnvironment = 1; + productName = SVGO; + }; /* End PBXLegacyTarget section */ /* Begin PBXNativeTarget section */ + 5ABE15411AE5072300861C6B /* Backend */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5ABE15721AE5072300861C6B /* Build configuration list for PBXNativeTarget "Backend" */; + buildPhases = ( + 5ABE153D1AE5072300861C6B /* Sources */, + 5ABE153E1AE5072300861C6B /* Frameworks */, + 5ABE153F1AE5072300861C6B /* Headers */, + 5A5C88511B4E7DCA00BF10B0 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 5A7FB7241E2C3DF800481B4A /* PBXTargetDependency */, + 5AB114B11B52AEE700A3C73A /* PBXTargetDependency */, + 5ABE16061AE5089300861C6B /* PBXTargetDependency */, + 5ABE16081AE5089700861C6B /* PBXTargetDependency */, + 5ABE160A1AE5089D00861C6B /* PBXTargetDependency */, + 5ABE160C1AE508A000861C6B /* PBXTargetDependency */, + 5ABE160E1AE508A300861C6B /* PBXTargetDependency */, + 5ABE16101AE508C200861C6B /* PBXTargetDependency */, + 5ABE16161AE508C200861C6B /* PBXTargetDependency */, + 5ABE161A1AE508C200861C6B /* PBXTargetDependency */, + 5F4F10AA2ADE0E3000A3093E /* PBXTargetDependency */, + 5FFC969B275842290035D0A2 /* PBXTargetDependency */, + 5FFC9754275843280035D0A2 /* PBXTargetDependency */, + D047E4CD1E7D81040036F96B /* PBXTargetDependency */, + ); + name = Backend; + productName = Backend; + productReference = 5ABE15421AE5072300861C6B /* ImageOptimGPL.framework */; + productType = "com.apple.product-type.framework"; + }; + 5ABE154B1AE5072300861C6B /* BackendTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5ABE15731AE5072300861C6B /* Build configuration list for PBXNativeTarget "BackendTests" */; + buildPhases = ( + 5ABE15481AE5072300861C6B /* Sources */, + 5ABE15491AE5072300861C6B /* Frameworks */, + 5ABE154A1AE5072300861C6B /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 5ABE154F1AE5072300861C6B /* PBXTargetDependency */, + 5ABE15511AE5072300861C6B /* PBXTargetDependency */, + ); + name = BackendTests; + productName = BackendTests; + productReference = 5ABE154C1AE5072300861C6B /* BackendTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 5AC64EFD1AF3FDEE0032AA7F /* ImageOptimize */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5AC64F221AF3FDEF0032AA7F /* Build configuration list for PBXNativeTarget "ImageOptimize" */; + buildPhases = ( + 5AC64EFA1AF3FDEE0032AA7F /* Sources */, + 5AC64EFB1AF3FDEE0032AA7F /* Frameworks */, + 5AC64EFC1AF3FDEE0032AA7F /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 5A1F3CA71B4800D8006570E0 /* PBXTargetDependency */, + ); + name = ImageOptimize; + productName = ImageOptimize; + productReference = 5AC64EFE1AF3FDEE0032AA7F /* ImageOptimize.appex */; + productType = "com.apple.product-type.app-extension"; + }; 8D1107260486CEB800E47090 /* ImageOptim */ = { isa = PBXNativeTarget; buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "ImageOptim" */; buildPhases = ( 8D11072C0486CEB800E47090 /* Sources */, + 5A7D24E113E5BC0C00815AAA /* Resources */, 5AC63C410E9ABCFD0053B879 /* Copy Frameworks */, 8D11072E0486CEB800E47090 /* Frameworks */, - 5A3470A8140BC7B50014F638 /* Copy Executables */, - 5A7D24E113E5BC0C00815AAA /* Resources */, + 5AC64F231AF3FDEF0032AA7F /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + 5A5811A91AD73A700001838D /* PBXTargetDependency */, 5A453F9B16BE79B6002AFE23 /* PBXTargetDependency */, - 5AA6D24F1503EA07006DDB3E /* PBXTargetDependency */, - 5A8594D91460BC5B0044095A /* PBXTargetDependency */, - 5A20CCA5112393CC0000400D /* PBXTargetDependency */, - 5A20CC98112393AC0000400D /* PBXTargetDependency */, - 5A6CEA83102B887C0058D07E /* PBXTargetDependency */, - 5A984D5311238E69007622D7 /* PBXTargetDependency */, - 5A4DC1961028284400A9DD55 /* PBXTargetDependency */, - 5A937647111CD26B005BA5B1 /* PBXTargetDependency */, - 5A4DC1941028284400A9DD55 /* PBXTargetDependency */, - 5A4DC1981028284400A9DD55 /* PBXTargetDependency */, + 5ABE15581AE5072300861C6B /* PBXTargetDependency */, + 5AC64F0B1AF3FDEE0032AA7F /* PBXTargetDependency */, ); name = ImageOptim; productInstallPath = "$(HOME)/Applications"; @@ -756,20 +1292,33 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 0460; + LastUpgradeCheck = 1510; + TargetAttributes = { + 5AC64EFD1AF3FDEE0032AA7F = { + CreatedOnToolsVersion = 6.3.1; + SystemCapabilities = { + com.apple.ApplicationGroups.Mac = { + enabled = 1; + }; + }; + }; + 8D1107260486CEB800E47090 = { + SystemCapabilities = { + com.apple.ApplicationGroups.Mac = { + enabled = 1; + }; + com.apple.Sandbox = { + enabled = 0; + }; + }; + }; + }; }; buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ImageOptim" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 12.0"; + developmentRegion = en; hasScannedForEncodings = 1; knownRegions = ( - English, - Japanese, - French, - German, - Polish, - Dutch, - Italian, pt, pt_PT, ru, @@ -782,6 +1331,26 @@ "en-GB", sv, ja, + "zh-Hant", + lt, + ko, + cs, + el, + sk, + tr, + vi, + nb, + en, + ro, + "zh-Hans", + ar, + nl, + fi, + de, + it, + pl, + uk, + Base, ); mainGroup = 29B97314FDCFA39411CA2CEA /* ImageOptim */; projectDirPath = ""; @@ -794,6 +1363,10 @@ ProductGroup = 5A4DC2061028ADB200A9DD55 /* Products */; ProjectRef = 5A4DC2051028ADB200A9DD55 /* gifsicle.xcodeproj */; }, + { + ProductGroup = D047E4821E7D7E310036F96B /* Products */; + ProjectRef = D047E47C1E7D7DF00036F96B /* guetzli.xcodeproj */; + }, { ProductGroup = 5A20CC9E112393B90000400D /* Products */; ProjectRef = 5A20CC9D112393B80000400D /* jpeg.xcodeproj */; @@ -812,22 +1385,37 @@ }, { ProductGroup = 5A1943640FF980B3007C3324 /* Products */; - ProjectRef = 5A9D56BC0E7F242C000F129F /* optipng.xcodeproj */; + ProjectRef = 5A9D56BC0E7F242C000F129F /* oxipng.xcodeproj */; }, { ProductGroup = 5A19433A0FF97F86007C3324 /* Products */; ProjectRef = 5A1943390FF97F86007C3324 /* pngcrush.xcodeproj */; }, { - ProductGroup = 5AA6D23C1503E9F5006DDB3E /* Products */; - ProjectRef = 5AA6D23B1503E9F5006DDB3E /* Sparkle.xcodeproj */; + ProductGroup = 5A728F1A1836C0EE004D0D73 /* Products */; + ProjectRef = 5A728F191836C0EE004D0D73 /* pngquant.xcodeproj */; + }, + { + ProductGroup = 5A5811941AD73A630001838D /* Products */; + ProjectRef = 5A5811931AD73A630001838D /* Sparkle.xcodeproj */; + }, + { + ProductGroup = 5A93FB4A1FF1BB2C005D2F27 /* Products */; + ProjectRef = 5A93FB491FF1BB2C005D2F27 /* svgcleaner.xcodeproj */; + }, + { + ProductGroup = 5A1EBECF17908F8200361F08 /* Products */; + ProjectRef = 5A1EBE7617908DC300361F08 /* zopfli-png.xcodeproj */; }, ); projectRoot = ""; targets = ( 8D1107260486CEB800E47090 /* ImageOptim */, - 5ABB9FEC0E8518DA006F51BB /* bzip archive */, 5A453F8D16BE79A7002AFE23 /* downloads */, + 5ABE15411AE5072300861C6B /* Backend */, + 5ABE154B1AE5072300861C6B /* BackendTests */, + 5AC64EFD1AF3FDEE0032AA7F /* ImageOptimize */, + 5A7FB7051E2C39CC00481B4A /* SVGO */, ); }; /* End PBXProject section */ @@ -840,11 +1428,11 @@ remoteRef = 5A1943440FF97F86007C3324 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5A1943680FF980B3007C3324 /* optipng */ = { + 5A1EBED317908F8200361F08 /* zopflipng */ = { isa = PBXReferenceProxy; fileType = "compiled.mach-o.executable"; - path = optipng; - remoteRef = 5A1943670FF980B3007C3324 /* PBXContainerItemProxy */; + path = zopflipng; + remoteRef = 5A1EBED217908F8200361F08 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; 5A20CC951123939C0000400D /* liblibpng.dylib */ = { @@ -868,6 +1456,41 @@ remoteRef = 5A4DC20C1028ADB200A9DD55 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A5811A51AD73A640001838D /* BinaryDelta */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = BinaryDelta; + remoteRef = 5A5811A41AD73A640001838D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5A5811A71AD73A640001838D /* Autoupdate.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = Autoupdate.app; + remoteRef = 5A5811A61AD73A640001838D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5A5811A81AD73A640001838D /* Sparkle Test App.app */ = { + isa = PBXReferenceProxy; + fileType = wrapper.application; + path = "Sparkle Test App.app"; + remoteRef = 5A5811A01AD73A640001838D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5A5811A91AD73A640001838D /* Sparkle Unit Tests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = "Sparkle Unit Tests.xctest"; + remoteRef = 5A5811A21AD73A640001838D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5A5811AF1BD73A640001838D /* Sparkle.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = Sparkle.framework; + remoteRef = 5A58119E1AD73A640001838D /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; 5A62DB07111CCE9F008848D0 /* jpegoptim */ = { isa = PBXReferenceProxy; fileType = "compiled.mach-o.executable"; @@ -882,13 +1505,6 @@ remoteRef = 5A739C2A0EA4073700D751E1 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5A8594E71460BCF20044095A /* jpegrescan */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.executable"; - path = jpegrescan; - remoteRef = 5A8594E61460BCF20044095A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; 5A95D413139D72A8005FD6FB /* libstatic.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; @@ -903,32 +1519,81 @@ remoteRef = 5A984D4911238E51007622D7 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5AA6D2471503E9F6006DDB3E /* Sparkle.framework */ = { + 5ADDF2FF1CE613A800B4AD58 /* UI Tests.xctest */ = { isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = Sparkle.framework; - remoteRef = 5AA6D2461503E9F6006DDB3E /* PBXContainerItemProxy */; + fileType = wrapper.cfbundle; + path = "UI Tests.xctest"; + remoteRef = 5ADDF2FE1CE613A800B4AD58 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5AA6D2491503E9F6006DDB3E /* Sparkle Test App.app */ = { + 5F75B47527583B9B0072F27A /* oxipng */ = { isa = PBXReferenceProxy; - fileType = wrapper.application; - path = "Sparkle Test App.app"; - remoteRef = 5AA6D2481503E9F6006DDB3E /* PBXContainerItemProxy */; + fileType = "compiled.mach-o.executable"; + path = oxipng; + remoteRef = 5F75B47427583B9B0072F27A /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5AA6D24B1503E9F6006DDB3E /* Sparkle Unit Tests.octest */ = { + 5F9163392ADB7A7B00230D34 /* pngquant */ = { isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = "Sparkle Unit Tests.octest"; - remoteRef = 5AA6D24A1503E9F6006DDB3E /* PBXContainerItemProxy */; + fileType = "compiled.mach-o.executable"; + path = pngquant; + remoteRef = 5F9163382ADB7A7B00230D34 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 5AA6D24D1503E9F6006DDB3E /* finish_installation.app */ = { + 5FFC96B8275842290035D0A2 /* generate_keys */ = { isa = PBXReferenceProxy; - fileType = wrapper.application; - path = finish_installation.app; - remoteRef = 5AA6D24C1503E9F6006DDB3E /* PBXContainerItemProxy */; + fileType = "compiled.mach-o.executable"; + path = generate_keys; + remoteRef = 5FFC96B7275842290035D0A2 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5FFC96BA275842290035D0A2 /* sign_update */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = sign_update; + remoteRef = 5FFC96B9275842290035D0A2 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5FFC96BC275842290035D0A2 /* libbsdiff.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libbsdiff.a; + remoteRef = 5FFC96BB275842290035D0A2 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5FFC96BE275842290035D0A2 /* libed25519.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = libed25519.a; + remoteRef = 5FFC96BD275842290035D0A2 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 5FFC9750275843160035D0A2 /* svgcleaner */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = svgcleaner; + remoteRef = 5FFC974F275843160035D0A2 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D047E4601E7C3CE80036F96B /* fileop */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = fileop; + remoteRef = D047E45F1E7C3CE80036F96B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D047E4621E7C3CE80036F96B /* generate_appcast */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = generate_appcast; + remoteRef = D047E4611E7C3CE80036F96B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + D047E4861E7D7E310036F96B /* guetzli */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = guetzli; + remoteRef = D047E4851E7D7E310036F96B /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXReferenceProxy section */ @@ -938,242 +1603,361 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A7D24E413E5BC3100815AAA /* Credits.rtf in Resources */, + 1ACFBA171799E9CC006D93B2 /* Credits.html in Resources */, 5A7D24EF13E5BC3100815AAA /* defaults.plist in Resources */, 5A7D24EE13E5BC3100815AAA /* dsa_pub.pem in Resources */, 5A7D24E613E5BC3100815AAA /* err.png in Resources */, + 5A0A24FD17495224003264CC /* err@2x.png in Resources */, 5A7D24E513E5BC3100815AAA /* Help in Resources */, 5A16343E140BF97400758D99 /* ImageOptim.icns in Resources */, + 5A7D24E313E5BC3100815AAA /* ImageOptim.xib in Resources */, + 1AD5B24E174F84C600BC75FD /* ImageOptimVerbs.sdef in Resources */, + 5A2E55881A7C386900985295 /* InfoPlist.strings in Resources */, 5A7D24E713E5BC3100815AAA /* Localizable.strings in Resources */, - 5A7D24E313E5BC3100815AAA /* MainMenu.xib in Resources */, - 5A7D24EC13E5BC3100815AAA /* minus.png in Resources */, 5A7D24E813E5BC3100815AAA /* noopt.png in Resources */, + 5A0A24F617494254003264CC /* noopt@2x.png in Resources */, 5A7D24E913E5BC3100815AAA /* ok.png in Resources */, - 5A7D24ED13E5BC3100815AAA /* plus.png in Resources */, + 5A0A24F117492D39003264CC /* ok@2x.png in Resources */, 5A7D24E213E5BC3100815AAA /* PrefsController.xib in Resources */, 5A7D24EA13E5BC3100815AAA /* progress.png in Resources */, - 5A9AEC19140996D700C9E97D /* reveal.png in Resources */, + 5A0A24F817494254003264CC /* progress@2x.png in Resources */, 5A1D3E8C14366933004EE809 /* style.css in Resources */, 5A7D24EB13E5BC3100815AAA /* wait.png in Resources */, + 5A0A24F917494254003264CC /* wait@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 5A81644C0E9ACABE00962CF2 /* Sign */ = { - isa = PBXShellScriptBuildPhase; + 5ABE154A1AE5072300861C6B /* Resources */ = { + isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 5AC64EC21AF3FCFE0032AA7F /* unoptimized.png in Resources */, ); - inputPaths = ( - "$(TARGET_BUILD_DIR)/ImageOptim.tar.bz2", - ); - name = Sign; - outputPaths = ( - "$(TARGET_BUILD_DIR)/sparkle.sig", + runOnlyForDeploymentPostprocessing = 0; + }; + 5AC64EFC1AF3FDEE0032AA7F /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5AC64F091AF3FDEE0032AA7F /* ExtensionController.xib in Resources */, + 5A05C5B91B55B40A000E32E3 /* ImageOptim.icns in Resources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "ruby \"$SRCROOT/sign_update.rb\" \"$TARGET_BUILD_DIR/ImageOptim.tar.bz2\" ~/.ssh/dsa_priv_imageoptim.pem > \"$TARGET_BUILD_DIR/sparkle.sig\"\nwc -c \"$TARGET_BUILD_DIR/ImageOptim.tar.bz2\" >> \"$TARGET_BUILD_DIR/sparkle.sig\"\ndate '+%a, %e %b %Y %H:%M:%S %z' >> \"$TARGET_BUILD_DIR/sparkle.sig\""; - showEnvVarsInLog = 0; }; - 5ABB9FEB0E8518DA006F51BB /* Tar */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 12; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 5ABE153D1AE5072300861C6B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; files = ( + 5ABE15781AE5073E00861C6B /* AdvCompWorker.m in Sources */, + 5ABE15791AE5073E00861C6B /* CommandWorker.m in Sources */, + 5ABE157A1AE5073E00861C6B /* DirScanner.m in Sources */, + 5AD033541E26B6840030291A /* File.m in Sources */, + 5ABE157B1AE5073E00861C6B /* GifsicleWorker.m in Sources */, + D047E4651E7C3D7C0036F96B /* GuetzliWorker.m in Sources */, + 5ABE15741AE5073100861C6B /* Job.m in Sources */, + 5A34D09A1AEF75CE00A154E4 /* JobQueue.m in Sources */, + 5ABE157C1AE5073E00861C6B /* JpegoptimWorker.m in Sources */, + 5ABE157D1AE5073E00861C6B /* JpegtranWorker.m in Sources */, + 5ABE16D21AE5AD9F00861C6B /* log.c in Sources */, + 5ABE157E1AE5073E00861C6B /* OxiPngWorker.m in Sources */, + 5ABE157F1AE5073E00861C6B /* PngCrushWorker.m in Sources */, + 5ABE15801AE5073E00861C6B /* PngoutWorker.m in Sources */, + 5AE04E2E1B5301E100669E85 /* PngquantWorker.m in Sources */, + 5ABE15771AE5073100861C6B /* ResultsDb.m in Sources */, + 5ABE15811AE5073E00861C6B /* Save.m in Sources */, + 5AC4CC801AF568E90003AEA2 /* SavingsFormatter.m in Sources */, + 5A6A56D01B497E210045AA0C /* SharedPrefs.m in Sources */, + 5A93FD2F1FF1C452005D2F27 /* SvgcleanerWorker.m in Sources */, + 5A7FB6F31E2C37EB00481B4A /* SvgoWorker.m in Sources */, + 5AD0347D1E27185D0030291A /* TempFile.m in Sources */, + 5ABE15821AE5073E00861C6B /* Worker.m in Sources */, + 5ABE15831AE5073E00861C6B /* ZopfliWorker.m in Sources */, ); - inputPaths = ( - "$(BUILT_PRODUCTS_DIR)/ImageOptim.app", - "$(SRCROOT)/optimal_file_list", + runOnlyForDeploymentPostprocessing = 0; + }; + 5ABE15481AE5072300861C6B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5A34D0031AEF6DA300A154E4 /* BackendTests.m in Sources */, ); - name = Tar; - outputPaths = ( - "$(TARGET_BUILD_DIR)/ImageOptim.tar.bz2", + runOnlyForDeploymentPostprocessing = 0; + }; + 5AC64EFA1AF3FDEE0032AA7F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5AC64F071AF3FDEE0032AA7F /* ExtensionController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "cd \"$BUILT_PRODUCTS_DIR/\" && /usr/bin/gnutar cjf \"$TARGET_BUILD_DIR/ImageOptim.tar.bz2\" --numeric-owner --owner=0 --group=0 --mtime=2012-03-03 --format=gnu --files-from=\"$SRCROOT/optimal_file_list\"\n"; - showEnvVarsInLog = 0; }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ 8D11072C0486CEB800E47090 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5AE54E210CAF16D800903DF4 /* AdvCompWorker.m in Sources */, - 5A44F5840CB2ECEB00BD2884 /* CommandWorker.m in Sources */, - 5AACA1380CAF23FF004D45CA /* DirWorker.m in Sources */, 5A34A634140EEDB900DE44D2 /* DragDropImageView.m in Sources */, - 5A0D2E570C922AB700FD7CDE /* File.m in Sources */, - 5AE1C49A0CA6CDDC000CF636 /* FilesQueue.m in Sources */, - 5A4DC21B1028AE1800A9DD55 /* GifsicleWorker.m in Sources */, - 5A0D2E5D0C922D6D00FD7CDE /* ImageOptim.m in Sources */, - 5A9E5B2B0CB961E000E05D28 /* JpegoptimWorker.m in Sources */, - 5A6E04430EA40B6A00380DE7 /* JpegtranWorker.m in Sources */, + 5AF8536C1B49F21C00CF76F5 /* FadeView.m in Sources */, + 5ABE16D01AE5AD0200861C6B /* FilesController.m in Sources */, + 1AD5B259174FEA6200BC75FD /* GetQueueCountCommand.m in Sources */, + 5ABE16621AE50D1D00861C6B /* ImageOptimController.m in Sources */, + 5FD569DD21A059A000BC9F82 /* JobProxy.m in Sources */, 8D11072D0486CEB800E47090 /* main.m in Sources */, 5A714AAD0CB0196A00C242C0 /* MyTableView.m in Sources */, - 5A5C29430CB04A0F00FAF446 /* OptiPngWorker.m in Sources */, - 5A44F4B40CB1868100BD2884 /* PngCrushWorker.m in Sources */, - 5AE54DEF0CAEF56100903DF4 /* PngoutWorker.m in Sources */, 5A6242080CA86DC7005942A3 /* PrefsController.m in Sources */, 5AA1B7E9140AC55F00B5707C /* RevealButtonCell.m in Sources */, - 5A8A18141416D1D700D62DB7 /* SavingsFormatter.m in Sources */, 5AACA8310CAFE74E004D45CA /* Transformers.m in Sources */, - 5AACA13F0CAF241B004D45CA /* Worker.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 5A20CC98112393AC0000400D /* PBXTargetDependency */ = { + 5A1F3CA71B4800D8006570E0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = libpng; - targetProxy = 5A20CC97112393AC0000400D /* PBXContainerItemProxy */; - }; - 5A20CCA5112393CC0000400D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = jpeg; - targetProxy = 5A20CCA4112393CC0000400D /* PBXContainerItemProxy */; + target = 5ABE15411AE5072300861C6B /* Backend */; + targetProxy = 5A1F3CA61B4800D8006570E0 /* PBXContainerItemProxy */; }; 5A453F9B16BE79B6002AFE23 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 5A453F8D16BE79A7002AFE23 /* downloads */; targetProxy = 5A453F9A16BE79B6002AFE23 /* PBXContainerItemProxy */; }; - 5A4DC1941028284400A9DD55 /* PBXTargetDependency */ = { + 5A5811A91AD73A700001838D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = optipng; - targetProxy = 5A4DC1931028284400A9DD55 /* PBXContainerItemProxy */; + name = Sparkle; + targetProxy = 5A5811A81AD73A700001838D /* PBXContainerItemProxy */; }; - 5A4DC1961028284400A9DD55 /* PBXTargetDependency */ = { + 5A7FB7241E2C3DF800481B4A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = jpegtran; - targetProxy = 5A4DC1951028284400A9DD55 /* PBXContainerItemProxy */; + target = 5A7FB7051E2C39CC00481B4A /* SVGO */; + targetProxy = 5A7FB7231E2C3DF800481B4A /* PBXContainerItemProxy */; }; - 5A4DC1981028284400A9DD55 /* PBXTargetDependency */ = { + 5AB114B11B52AEE700A3C73A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = pngcrush; - targetProxy = 5A4DC1971028284400A9DD55 /* PBXContainerItemProxy */; + target = 5A453F8D16BE79A7002AFE23 /* downloads */; + targetProxy = 5AB114B01B52AEE700A3C73A /* PBXContainerItemProxy */; }; - 5A6CEA83102B887C0058D07E /* PBXTargetDependency */ = { + 5ABE154F1AE5072300861C6B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5ABE15411AE5072300861C6B /* Backend */; + targetProxy = 5ABE154E1AE5072300861C6B /* PBXContainerItemProxy */; + }; + 5ABE15511AE5072300861C6B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D1107260486CEB800E47090 /* ImageOptim */; + targetProxy = 5ABE15501AE5072300861C6B /* PBXContainerItemProxy */; + }; + 5ABE15581AE5072300861C6B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5ABE15411AE5072300861C6B /* Backend */; + targetProxy = 5ABE15571AE5072300861C6B /* PBXContainerItemProxy */; + }; + 5ABE16061AE5089300861C6B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = advpng; + targetProxy = 5ABE16051AE5089300861C6B /* PBXContainerItemProxy */; + }; + 5ABE16081AE5089700861C6B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = libpng; + targetProxy = 5ABE16071AE5089700861C6B /* PBXContainerItemProxy */; + }; + 5ABE160A1AE5089D00861C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = gifsicle; - targetProxy = 5A6CEA82102B887C0058D07E /* PBXContainerItemProxy */; + targetProxy = 5ABE16091AE5089D00861C6B /* PBXContainerItemProxy */; }; - 5A8594D91460BC5B0044095A /* PBXTargetDependency */ = { + 5ABE160C1AE508A000861C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = jpegrescan; - targetProxy = 5A8594D81460BC5B0044095A /* PBXContainerItemProxy */; + name = jpeg; + targetProxy = 5ABE160B1AE508A000861C6B /* PBXContainerItemProxy */; }; - 5A937647111CD26B005BA5B1 /* PBXTargetDependency */ = { + 5ABE160E1AE508A300861C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = jpegoptim; - targetProxy = 5A937646111CD26B005BA5B1 /* PBXContainerItemProxy */; + targetProxy = 5ABE160D1AE508A300861C6B /* PBXContainerItemProxy */; }; - 5A984D5311238E69007622D7 /* PBXTargetDependency */ = { + 5ABE16101AE508C200861C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = advpng; - targetProxy = 5A984D5211238E69007622D7 /* PBXContainerItemProxy */; + name = jpegtran; + targetProxy = 5ABE160F1AE508C200861C6B /* PBXContainerItemProxy */; }; - 5AA6D24F1503EA07006DDB3E /* PBXTargetDependency */ = { + 5ABE16161AE508C200861C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Sparkle; - targetProxy = 5AA6D24E1503EA07006DDB3E /* PBXContainerItemProxy */; + name = pngcrush; + targetProxy = 5ABE16151AE508C200861C6B /* PBXContainerItemProxy */; }; - 5ABB9FF00E8518DF006F51BB /* PBXTargetDependency */ = { + 5ABE161A1AE508C200861C6B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 8D1107260486CEB800E47090 /* ImageOptim */; - targetProxy = 5ABB9FEF0E8518DF006F51BB /* PBXContainerItemProxy */; + name = zopflipng; + targetProxy = 5ABE16191AE508C200861C6B /* PBXContainerItemProxy */; + }; + 5AC64F0B1AF3FDEE0032AA7F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5AC64EFD1AF3FDEE0032AA7F /* ImageOptimize */; + targetProxy = 5AC64F0A1AF3FDEE0032AA7F /* PBXContainerItemProxy */; + }; + 5F4F10AA2ADE0E3000A3093E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "pngquant-bin"; + targetProxy = 5F4F10A92ADE0E3000A3093E /* PBXContainerItemProxy */; + }; + 5FFC969B275842290035D0A2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "oxipng-bin"; + targetProxy = 5FFC969A275842290035D0A2 /* PBXContainerItemProxy */; + }; + 5FFC9754275843280035D0A2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "svgcleaner-bin"; + targetProxy = 5FFC9753275843280035D0A2 /* PBXContainerItemProxy */; + }; + D047E4CD1E7D81040036F96B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = guetzli; + targetProxy = D047E4CC1E7D81040036F96B /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - 5A45530A1024EB1100A69944 /* MainMenu.xib */ = { + 1ACFBA191799E9CC006D93B2 /* Credits.html */ = { + isa = PBXVariantGroup; + children = ( + 5A7F3DC81EB7401600E94752 /* ar */, + 5A012EBD17A89234002E794E /* cs */, + 1ACFBA3A179A1348006D93B2 /* da */, + 1ACFBA3F179A1352006D93B2 /* de */, + 1ACFBA181799E9CC006D93B2 /* en */, + 1ACFBA3D179A1351006D93B2 /* es */, + 1ACFBA3E179A1352006D93B2 /* fr */, + 1ACFBA49179A135B006D93B2 /* it */, + 5A7F3D961EB73E0E00E94752 /* ja */, + 1ACFBA3C179A1350006D93B2 /* nl */, + 5A012EFC17A89860002E794E /* no */, + 1ACFBA39179A1314006D93B2 /* pl */, + 1ACFBA44179A1356006D93B2 /* pt */, + 1ACFBA45179A1357006D93B2 /* pt-BR */, + 5AE9755E17AD5BE20037C2E2 /* ru */, + 1ACFBA47179A1359006D93B2 /* sv */, + 5A012ECC17A89238002E794E /* tr */, + 5A012ECD17A89239002E794E /* vi */, + ); + name = Credits.html; + sourceTree = ""; + }; + 5A2E55861A7C386900985295 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + 5A2E55871A7C386900985295 /* ja */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + 5A45530A1024EB1100A69944 /* ImageOptim.xib */ = { isa = PBXVariantGroup; children = ( + 5A7F3DC41EB73F2E00E94752 /* ar */, + 5ACCB3F117A828FF00853EFE /* cs */, 5ABF610913E37B07009F6F22 /* da */, 5A8DFBD710C097A0009A5C8E /* Dutch */, + 5AA9F7701893736100697D8E /* el */, + 5A89F7DA1B64FFBC00F4C0B6 /* en */, 5A8B52D41559C278005AA6E3 /* en-GB */, 5A45530B1024EB1100A69944 /* English */, 5A7D24F313EDF5F100815AAA /* es */, + 5A7F3E121EB7418500E94752 /* fi */, 5A94A00D102757F0005CC9CB /* French */, 5AA339011117C41400046C79 /* German */, 5AA2213E10DE9CF900D67435 /* Italian */, 5A9ED38415F22153005B8CA5 /* ja */, + F8C4ABD01755C91B004FC041 /* ko */, + 1A9AF7C617565DCE002ED2A5 /* lt */, 5AD299BB1436757F0048C725 /* no */, 5A4553121024EF3000A69944 /* Polish */, 5A0343BE129984B3002091AA /* pt */, 5AE74B5C146DECA300287FA6 /* pt-BR */, + 5A059F1A1B6506C400FC8184 /* ro */, 5A0344371299882B002091AA /* ru */, + 5A7F3DC31EB73F0000E94752 /* sk */, 5AC98826155F1ACD00E221A0 /* sv */, + 5ACCB3F417A8292500853EFE /* tr */, + 5A7F3E191EB741FC00E94752 /* uk */, + 5ACCB3F517A8292500853EFE /* vi */, + 5A5E8B1F1B6509FF003012E9 /* zh-Hans */, + 1B5210E616BFA7CA0044C869 /* zh-Hant */, ); - name = MainMenu.xib; + name = ImageOptim.xib; sourceTree = ""; }; 5A45530D1024EB3000A69944 /* PrefsController.xib */ = { isa = PBXVariantGroup; children = ( + 5A7F3DC71EB73F4700E94752 /* ar */, + 5A45530E1024EB3000A69944 /* Base */, + 5ACCB3F617A8294900853EFE /* cs */, 5ABF610813E37AFC009F6F22 /* da */, 5A8DFBD810C097AC009A5C8E /* Dutch */, + 5AA9F7A9189374BF00697D8E /* el */, + 5A0E43D81B650F28008EF2EB /* en */, 5A8B52D31559C269005AA6E3 /* en-GB */, - 5A45530E1024EB3000A69944 /* English */, 5A7D24F413EDF5F100815AAA /* es */, + 5A7F3E181EB741CB00E94752 /* fi */, 5A94A00C102757E5005CC9CB /* French */, 5AA339021117C41B00046C79 /* German */, 5AA2213F10DE9D0100D67435 /* Italian */, 5A9ED38215F2214F005B8CA5 /* ja */, + F8C4ABD11755C91B004FC041 /* ko */, + 1A9AF7C717565DCE002ED2A5 /* lt */, 5AD299BD143675870048C725 /* no */, 5A4553131024EF4100A69944 /* Polish */, 5A0343BF129984BA002091AA /* pt */, 5AE74B5E146DECAA00287FA6 /* pt-BR */, + 5A5E8B341B650A2B003012E9 /* ro */, 5A0344381299882F002091AA /* ru */, + 5A7F3DC21EB73EF300E94752 /* sk */, 5AC98827155F1ACD00E221A0 /* sv */, + 5AA9F781189373AB00697D8E /* tr */, + 5A7F3E1A1EB7420700E94752 /* uk */, + 5ACCB3FA17A8294900853EFE /* vi */, + 5A5E8AC41B6508DA003012E9 /* zh-Hans */, + 1B5210E716BFA7CA0044C869 /* zh-Hant */, ); name = PrefsController.xib; sourceTree = ""; }; - 5A887F8310C17361006A0687 /* Credits.rtf */ = { - isa = PBXVariantGroup; - children = ( - 5ABF610A13E37B5F009F6F22 /* da */, - 5A887F8410C17361006A0687 /* Dutch */, - 5AD3032010D555E4002A5558 /* English */, - 5A7D24F013EDF5F100815AAA /* es */, - 5AD3032210D555F7002A5558 /* French */, - 5AA338A21117BF1900046C79 /* German */, - 5AA2213210DE9CD500D67435 /* Italian */, - 5A9ED38815F22199005B8CA5 /* ja */, - 5AD299B71436756D0048C725 /* no */, - 5AD3032110D555ED002A5558 /* Polish */, - 5A0343B012998485002091AA /* pt */, - 5AE74B62146DECB800287FA6 /* pt-BR */, - 5A03443612998825002091AA /* ru */, - 5AC9882A155F1AE100E221A0 /* sv */, - ); - name = Credits.rtf; - sourceTree = ""; - }; 5A94A03A10275E11005CC9CB /* Localizable.strings */ = { isa = PBXVariantGroup; children = ( + 5A7F3DC61EB73F3E00E94752 /* ar */, + 5ACCB41917A82E3100853EFE /* cs */, 5ABF611613E37BC3009F6F22 /* da */, 5A8DFBEB10C09812009A5C8E /* Dutch */, + 5ACCB41A17A82E3100853EFE /* el */, 5A8B52D51559C291005AA6E3 /* en-GB */, 5A7D24F213EDF5F100815AAA /* es */, + 5A7F3E131EB7419400E94752 /* fi */, 5A94A04D10275F40005CC9CB /* French */, 5AA338BF1117C00300046C79 /* German */, 5AA2213310DE9CEF00D67435 /* Italian */, 5A9ED38615F22159005B8CA5 /* ja */, + F8C4ABCF1755C91B004FC041 /* ko */, + 1A9AF7C517565DCE002ED2A5 /* lt */, 5AD299B9143675770048C725 /* no */, 5A94A03B10275E11005CC9CB /* Polish */, 5A7A314713E436690012DCFB /* pt */, 5AE74B57146DEC8700287FA6 /* pt-BR */, + 5A5E8B331B650A0F003012E9 /* ro */, 5A03443A12998845002091AA /* ru */, + 5A7F3DAA1EB73ED800E94752 /* sk */, 5AC9882C155F1AE100E221A0 /* sv */, + 5ACCB41C17A82E3100853EFE /* tr */, + 5A7F3E1B1EB7420B00E94752 /* uk */, + 5ACCB41D17A82E3100853EFE /* vi */, + 5A5E8AC21B6508D9003012E9 /* zh-Hans */, + 1B5210E516BFA7CA0044C869 /* zh-Hant */, ); name = Localizable.strings; sourceTree = ""; @@ -1181,19 +1965,34 @@ 5A95FEBE0CB8041A00737B79 /* Help */ = { isa = PBXVariantGroup; children = ( + 5A7F3E111EB7414800E94752 /* ar */, + 5AA9F7821893743B00697D8E /* cs */, 5ABF611313E37B86009F6F22 /* da */, 5A8DFBD910C097B9009A5C8E /* Dutch */, + 5AA9F7831893744800697D8E /* el */, 5A8B52D61559C29D005AA6E3 /* en-GB */, 5A95FEBF0CB8041A00737B79 /* English */, 5A7D24F113EDF5F100815AAA /* es */, + 5A7F3E141EB741AB00E94752 /* fi */, 5A94A02610275AFD005CC9CB /* fr */, 5AA338A31117BF5500046C79 /* German */, + 5AA9F7841893746300697D8E /* it */, 5A9ED38015F2213F005B8CA5 /* ja */, + F8C4ABCD1755C91B004FC041 /* ko */, + 1A9AF7C317565DCE002ED2A5 /* lt */, 5AD299C2143675BB0048C725 /* no */, + 5AA9F799189374A000697D8E /* pl */, 5A034423129985D5002091AA /* pt */, 5AE74B60146DECB100287FA6 /* pt-BR */, + 5A7F3D941EB73DA500E94752 /* ro */, 5A03443B1299884F002091AA /* ru */, + 5A7F3D781EB73DA100E94752 /* sk */, 5AC9882B155F1AE100E221A0 /* sv */, + 5AA9F7851893746E00697D8E /* tr */, + 5A7F3E1C1EB7421700E94752 /* uk */, + 5AA9F7861893747900697D8E /* vi */, + 5A5E8ABF1B6508D9003012E9 /* zh-Hans */, + 1B5210E316BFA7C90044C869 /* zh-Hant */, ); name = Help; sourceTree = ""; @@ -1213,28 +2012,319 @@ }; name = Release; }; - 5ABB9FED0E8518DA006F51BB /* Debug */ = { + 5A7FB7061E2C39CC00481B4A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 5A7FB7071E2C39CC00481B4A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; + 5ABE155B1AE5072300861C6B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CURRENT_PROJECT_VERSION = 3; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Backend/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptim.Backend; + PRODUCT_NAME = ImageOptimGPL; + SKIP_INSTALL = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 5ABE155C1AE5072300861C6B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CURRENT_PROJECT_VERSION = 3; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 2; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_VERSION = A; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Backend/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptim.Backend; + PRODUCT_NAME = ImageOptimGPL; + SKIP_INSTALL = YES; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 5ABE155D1AE5072300861C6B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Backend/Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptimizeExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ImageOptim.app/Contents/MacOS/ImageOptim"; + }; + name = Debug; + }; + 5ABE155E1AE5072300861C6B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(DEVELOPER_FRAMEWORKS_DIR)", + "$(inherited)", + ); + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = Backend/Tests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptimizeExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ImageOptim.app/Contents/MacOS/ImageOptim"; + }; + name = Release; + }; + 5AC64F0D1AF3FDEF0032AA7F /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ENTITLEMENTS = ImageOptimize/ImageOptimize.entitlements; COMBINE_HIDPI_IMAGES = YES; - PRODUCT_NAME = BuildArchive; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = ImageOptimize/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptimizeExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SKIP_INSTALL = YES; }; name = Debug; }; - 5ABB9FEE0E8518DA006F51BB /* Release */ = { + 5AC64F0E1AF3FDEF0032AA7F /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ENTITLEMENTS = ImageOptimize/ImageOptimize.entitlements; COMBINE_HIDPI_IMAGES = YES; - COPY_PHASE_STRIP = YES; - PRODUCT_NAME = BuildArchive; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + INFOPLIST_FILE = ImageOptimize/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@executable_path/../../../../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptimizeExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + SKIP_INSTALL = YES; }; name = Release; }; C01FCF4B08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = ImageOptim.entitlements; + DEVELOPMENT_TEAM = 59KZTZA4XR; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(BUILT_PRODUCTS_DIR)", + ); + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; INFOPLIST_FILE = Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptim; PRODUCT_NAME = ImageOptim; }; name = Debug; @@ -1242,8 +2332,24 @@ C01FCF4C08A954540054247B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CODE_SIGN_ENTITLEMENTS = ImageOptim.entitlements; + DEVELOPMENT_TEAM = 59KZTZA4XR; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(BUILT_PRODUCTS_DIR)", + ); + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = NO; INFOPLIST_FILE = Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = net.pornel.ImageOptim; PRODUCT_NAME = ImageOptim; }; name = Release; @@ -1252,13 +2358,15 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27B9C2139B079A0095FC2F /* debug.xcconfig */; buildSettings = { + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_TESTABILITY = YES; FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)"; GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_OBJC_GC = required; - GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_PREPROCESSOR_DEFINITIONS = DEBUGX; GCC_TREAT_WARNINGS_AS_ERRORS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + STRINGS_FILE_OUTPUT_ENCODING = binary; }; name = Debug; }; @@ -1269,8 +2377,7 @@ APPLY_RULES_IN_COPY_FILES = YES; FRAMEWORK_SEARCH_PATHS = "$(SRCROOT)"; GCC_DYNAMIC_NO_PIC = YES; - GCC_ENABLE_OBJC_GC = required; - MACOSX_DEPLOYMENT_TARGET = 10.6; + STRINGS_FILE_OUTPUT_ENCODING = binary; }; name = Release; }; @@ -1286,11 +2393,38 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5ABB9FF10E8518FE006F51BB /* Build configuration list for PBXAggregateTarget "bzip archive" */ = { + 5A7FB71E1E2C39CC00481B4A /* Build configuration list for PBXLegacyTarget "SVGO" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5A7FB7061E2C39CC00481B4A /* Debug */, + 5A7FB7071E2C39CC00481B4A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5ABE15721AE5072300861C6B /* Build configuration list for PBXNativeTarget "Backend" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5ABE155B1AE5072300861C6B /* Debug */, + 5ABE155C1AE5072300861C6B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5ABE15731AE5072300861C6B /* Build configuration list for PBXNativeTarget "BackendTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5ABE155D1AE5072300861C6B /* Debug */, + 5ABE155E1AE5072300861C6B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5AC64F221AF3FDEF0032AA7F /* Build configuration list for PBXNativeTarget "ImageOptimize" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5ABB9FED0E8518DA006F51BB /* Debug */, - 5ABB9FEE0E8518DA006F51BB /* Release */, + 5AC64F0D1AF3FDEF0032AA7F /* Debug */, + 5AC64F0E1AF3FDEF0032AA7F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/imageoptim/ImageOptimController.h b/imageoptim/ImageOptimController.h new file mode 100644 index 00000000..6c6d3c7c --- /dev/null +++ b/imageoptim/ImageOptimController.h @@ -0,0 +1,43 @@ +/* ImageOptim */ +#import + +extern NSDictionary *statusImages; + +@class FilesController; +@class PrefsController; + +@interface ImageOptimController : NSObject { + IBOutlet NSTableView *tableView; + IBOutlet FilesController *__unsafe_unretained filesController; + + PrefsController *prefsController; + + IBOutlet NSTextField *statusBarLabel; + IBOutlet NSTextView *credits; + + IBOutlet NSTableColumn *fileColumn, *sizeColumn, *originalSizeColumn, *savingsColumn, *bestToolColumn; + + QLPreviewPanel *previewPanel; + + dispatch_source_t statusBarUpdateQueue; + IBOutlet NSNumberFormatter *savingsFormatter; +} + +- (IBAction)showPrefs:(id)sender; +- (IBAction)showLossyPrefs:(id)sender; +- (IBAction)stop:(id)sender; +- (IBAction)startAgain:(id)sender; +- (IBAction)startAgainOptimized:(id)sender; +- (IBAction)clearComplete:(id)sender; + +- (IBAction)quickLookAction:(id)sender; +- (IBAction)openHomepage:(id)sender; +- (IBAction)viewSource:(id)sender; +- (IBAction)openDonationPage:(id)sender; +- (IBAction)browseForFiles:(id)sender; + +@property (readonly) int numberOfCPUs; +- (void)loadCreditsHTML:(id)_; + +@property (unsafe_unretained, readonly) FilesController *filesController; +@end diff --git a/imageoptim/ImageOptimController.m b/imageoptim/ImageOptimController.m new file mode 100644 index 00000000..4423b5f1 --- /dev/null +++ b/imageoptim/ImageOptimController.m @@ -0,0 +1,491 @@ +#import "ImageOptimController.h" +#import "FilesController.h" +#import "RevealButtonCell.h" +#import "Backend/Job.h" +#import "JobProxy.h" +#import "File.h" +#import "Backend/Workers/Worker.h" +#import "PrefsController.h" +#import "MyTableView.h" +#import "SharedPrefs.h" +#include +#include +#import + +@implementation ImageOptimController + +extern int quitWhenDone; + +static const char *kIMPreviewPanelContext = "preview"; + +@synthesize filesController; + +- (void)applicationWillFinishLaunching:(NSNotification *)unused { + if (quitWhenDone) { + [NSApp hide:self]; + } + + NSMutableDictionary *defs = [NSMutableDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"defaults" ofType:@"plist"]]; + + NSUInteger maxTasks = [[NSProcessInfo processInfo] activeProcessorCount]; + + defs[@"RunConcurrentFiles"] = @(maxTasks); + defs[@"RunConcurrentDirscans"] = @((int)ceil((double)maxTasks / 3.9)); + + // Use lighter defaults on slower machines + if (maxTasks <= 4) { + defs[@"PngOutEnabled"] = @(NO); + if (maxTasks <= 2) { + defs[@"PngCrush2Enabled"] = @(NO); + } + } + + NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; + [userDefaults registerDefaults:defs]; + + [self initStatusbarWithDefaults:userDefaults]; + + IOSharedPrefsCopy(userDefaults); + + [filesController configureWithTableView:tableView]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(observeNotification:) name:kJobQueueFinished object:filesController]; + + NSArray *monospaceFontColumns = @[ + fileColumn, + sizeColumn, + originalSizeColumn, + savingsColumn, + bestToolColumn, + ]; + for (NSTableColumn *column in monospaceFontColumns) { + NSFont *font = [NSFont systemFontOfSize:13]; + if ([NSFont respondsToSelector:@selector(monospacedDigitSystemFontOfSize:weight:)]) { + if (@available(macOS 10.11, *)) { + font = [NSFont monospacedDigitSystemFontOfSize:13 weight:NSFontWeightRegular]; + } else { + // Fallback on earlier versions + } + } + [column.dataCell setFont:font]; + } + + [NSApp setServicesProvider:self]; +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self name:kJobQueueFinished object:filesController]; + [credits removeObserver:self forKeyPath:@"effectiveAppearance"]; +} + +- (void)handleServices:(NSPasteboard *)pboard + userData:(NSString *)userData + error:(NSString **)error { + NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType]; + if (paths && [paths count] > 0) { + [filesController performSelectorInBackground:@selector(addPaths:) withObject:paths]; + return; + } + + NSURL *url = [pboard propertyListForType:NSPasteboardTypeFileURL]; + if (url) { + NSArray *urls = @[url]; + [filesController performSelectorInBackground:@selector(addURLs:) withObject:urls]; + } +} + +static void appendFormatNameIfLossyEnabled(NSUserDefaults *defs, NSString *name, NSString *key, NSMutableArray *arr) { + NSInteger q = [defs integerForKey:key]; + if (q > 0 && q < 100) { + [arr addObject:[NSString stringWithFormat:@"%@ %ld%%", name, q]]; + } +} + +- (void)initStatusbarWithDefaults:(NSUserDefaults *)defs { + [[statusBarLabel cell] setBackgroundStyle:NSBackgroundStyleRaised]; + + static BOOL overallAvg = NO; + static NSString *defaultText; + defaultText = statusBarLabel.stringValue; + NSByteCountFormatter *sizeFormatter = [[NSByteCountFormatter alloc] init]; + + static NSNumberFormatter *percFormatter; + percFormatter = [NSNumberFormatter new]; + + if (quitWhenDone) { + defaultText = NSLocalizedString(@"ImageOptim will quit when optimizations are complete", @"status bar"); + } + + [percFormatter setMaximumFractionDigits:1]; + [percFormatter setNumberStyle:NSNumberFormatterPercentStyle]; + + statusBarUpdateQueue = dispatch_source_create(DISPATCH_SOURCE_TYPE_DATA_OR, 0, 0, + dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)); + dispatch_source_set_event_handler(statusBarUpdateQueue, ^{ + NSString *str = defaultText; + BOOL selectable = NO; + @synchronized(self->filesController) { + long long bytesTotal = 0, optimizedTotal = 0; + double optimizedFractionTotal = 0, maxOptimizedFraction = 0; + NSUInteger optimizedFileCount = 0; + BOOL anyBusyFiles = false; + + NSArray *content = [self->filesController content]; + for (JobProxy *f in content) { + assert([f isKindOfClass:[JobProxy class]]); + + if (!anyBusyFiles && [f isBusy]) { + anyBusyFiles = YES; + } + + const NSUInteger bytes = [f.byteSizeOriginal unsignedIntegerValue]; + const NSUInteger optimized = [f.byteSizeOptimized unsignedIntegerValue]; + if (bytes && optimized && (bytes != optimized || [f isDone])) { + const double optimizedFraction = 1.0 - (double)optimized / (double)bytes; + if (optimizedFraction > maxOptimizedFraction) { + maxOptimizedFraction = optimizedFraction; + } + optimizedFractionTotal += optimizedFraction; + bytesTotal += bytes; + optimizedTotal += optimized; + optimizedFileCount++; + } + } + + if (optimizedFileCount > 1 && bytesTotal) { + const double savedTotal = 1.0 - (double)optimizedTotal / (double)bytesTotal; + const double savedAvg = optimizedFractionTotal / (double)optimizedFileCount; + if (savedTotal > 0.001) { + if (savedTotal * 0.8 > savedAvg) { + overallAvg = YES; + } else if (savedAvg * 0.8 > savedTotal) { + overallAvg = NO; + } + + NSString *fmtStr; + double avgNum; + if (overallAvg) { + fmtStr = NSLocalizedString(@"Saved %@ out of %@. %@ overall (up to %@ per file)", "total ratio, status bar"); + avgNum = savedTotal; + } else { + fmtStr = NSLocalizedString(@"Saved %@ out of %@. %@ per file on average (up to %@)", "per file avg, status bar"); + avgNum = savedAvg; + } + + const long long bytesSaved = bytesTotal - optimizedTotal; + + str = [NSString stringWithFormat:fmtStr, + [sizeFormatter stringFromByteCount:bytesSaved], + [sizeFormatter stringFromByteCount:bytesTotal], + [percFormatter stringFromNumber:@(avgNum)], + [percFormatter stringFromNumber:@(maxOptimizedFraction)]]; + selectable = YES; + } + } else if ([defs boolForKey:@"GuetzliEnabled"]) { + str = @"Warning: Guetzli tool enabled. Optimizations may take a very long time."; + } else if ([defs boolForKey:@"LossyEnabled"]) { + NSMutableArray *arr = [NSMutableArray new]; + appendFormatNameIfLossyEnabled(defs, @"JPEG", @"JpegOptimMaxQuality", arr); + appendFormatNameIfLossyEnabled(defs, @"PNG", @"PngMinQuality", arr); + appendFormatNameIfLossyEnabled(defs, @"GIF", @"GifQuality", arr); + if ([arr count]) { + str = [NSString stringWithFormat:@"%@ (%@)", + NSLocalizedString(@"Lossy minification enabled", @"status bar"), + [arr componentsJoinedByString:@", "]]; + } + } else if (anyBusyFiles) { + str = @""; + } + + // that was also in KVO, but caused deadlocks there. Here it's deferred. + [self->filesController updateStoppableState]; + } + + dispatch_async(dispatch_get_main_queue(), ^() { + [self->statusBarLabel setStringValue:str]; + [self->statusBarLabel setSelectable:selectable]; + }); + usleep(100000); // 1/10th of a sec to avoid updating statusbar as fast as possible (100% cpu on the statusbar alone is ridiculous) + }); + dispatch_resume(statusBarUpdateQueue); + + [filesController addObserver:self forKeyPath:@"isBusy" options:0 context:nil]; + [filesController addObserver:self forKeyPath:@"arrangedObjects.@count" options:0 context:nil]; + [filesController addObserver:self forKeyPath:@"arrangedObjects.@sum.byteSizeOptimized" options:0 context:nil]; + [filesController addObserver:self forKeyPath:@"selectionIndexes" options:0 context:(void *)kIMPreviewPanelContext]; + + [self updateStatusBar]; // Initial display + + [[NSNotificationCenter defaultCenter] addObserverForName:NSUserDefaultsDidChangeNotification + object:defs + queue:[NSOperationQueue mainQueue] + usingBlock:^(NSNotification *note) { + [self updateStatusBar]; + }]; +} + +- (void)updateStatusBar { + dispatch_source_merge_data(statusBarUpdateQueue, 1); +} + +- (void)awakeFromNib { + if (quitWhenDone) { + [NSApp hide:self]; + } + + RevealButtonCell *cell = [[tableView tableColumnWithIdentifier:@"filename"] dataCell]; + [cell setInfoButtonAction:@selector(openInFinder:)]; + [cell setTarget:tableView]; + + [credits setString:@""]; + + // this creates and sets the text for textview + [self performSelectorInBackground:@selector(loadCreditsHTML:) withObject:nil]; + [credits addObserver:self forKeyPath:@"effectiveAppearance" options:0 context:nil]; +} + +- (void)loadCreditsHTML:(id)_unused { + static const char header[] = "\ + \ + \ + Codestin Search App"; + + NSMutableData *html = [NSMutableData dataWithBytesNoCopy:(void *)header length:sizeof(header) freeWhenDone:NO]; + NSString*creditsPath = [[NSBundle mainBundle] pathForResource:@"Credits" ofType:@"html"]; + NSData *credits = [NSData dataWithContentsOfFile:creditsPath]; + if (!credits) { + return; + } + [html appendData:credits]; + NSAttributedString *tmpStr = [[NSAttributedString alloc] + initWithHTML:html + documentAttributes:nil]; + + if (!tmpStr) return; + dispatch_async(dispatch_get_main_queue(), ^() { + @try { + [self->credits setEditable:YES]; + [self->credits insertText:tmpStr replacementRange:NSMakeRange(0, 0)]; + [self->credits setEditable:NO]; + [self adaptCreditsAppearance]; + } @catch (id) { /*nothing*/ + } + }); +} + +- (BOOL)isDarkMode { +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 101400 + if (@available(macOS 10.14, *)) { + NSAppearanceName bestAppearance = [credits.effectiveAppearance bestMatchFromAppearancesWithNames:@[ NSAppearanceNameAqua, NSAppearanceNameDarkAqua ]]; + return [bestAppearance isEqualToString:NSAppearanceNameDarkAqua]; + } +#endif + return false; +} + +- (void)adaptCreditsAppearance { + credits.textColor = [self isDarkMode] ? [NSColor whiteColor] : [NSColor blackColor]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + // Defer and coalesce statusbar updates + dispatch_source_merge_data(statusBarUpdateQueue, 1); + + if (object == credits && [keyPath isEqualToString:@"effectiveAppearance"]) { + [self adaptCreditsAppearance]; + } + + if (context == kIMPreviewPanelContext) { + [previewPanel reloadData]; + } +} + +- (void)observeNotification:(NSNotification *)notif { + if (!filesController.isBusy) { + if (quitWhenDone) { + [NSApp terminate:self]; + } else if ([[NSUserDefaults standardUserDefaults] boolForKey:@"BounceDock"]) { + [NSApp requestUserAttention:NSInformationalRequest]; + } + } +} + +// invoked by Dock +- (void)application:(NSApplication *)sender openFiles:(NSArray *)paths { + [filesController setRow:-1]; + [sender replyToOpenOrPrint:[filesController addPaths:paths] ? NSApplicationDelegateReplySuccess : NSApplicationDelegateReplyFailure]; +} + +- (IBAction)quickLookAction:(id)sender { + [tableView performSelector:@selector(quickLook)]; +} + +- (IBAction)revert:(id)sender { + [filesController revert]; +} + +- (IBAction)stop:(id)sender { + [filesController stopSelected]; +} + +- (IBAction)startAgain:(id)sender { + // alt-click on a button (this is used from menu too, but alternative menu item covers that anyway + BOOL onlyOptimized = !!([[NSApp currentEvent] modifierFlags] & NSEventModifierFlagOption); + [filesController startAgainOptimized:onlyOptimized]; +} + +- (IBAction)startAgainOptimized:(id)sender { + [filesController startAgainOptimized:YES]; +} + +- (IBAction)clearComplete:(id)sender { + [filesController clearComplete]; +} + +- (IBAction)showPrefs:(id)sender { + if (!prefsController) { + prefsController = [PrefsController new]; + } + [prefsController showWindow:self]; +} + +- (IBAction)showLossyPrefs:(id)sender { + if (!prefsController) { + prefsController = [PrefsController new]; + } + [prefsController showLossySettings:sender]; +} + +- (IBAction)openApiHomepage:(id)sender { + [self openURL:@"https://imageoptim.com/app-api"]; +} + +- (IBAction)openHomepage:(id)sender { + [self openURL:@"https://imageoptim.com"]; +} + +- (IBAction)viewSource:(id)sender { + [self openURL:@"https://imageoptim.com/source"]; +} + +- (IBAction)openDonationPage:(id)sender { + [self openURL:@"https://imageoptim.com/donate.html"]; +} + +- (void)openURL:(NSString *)stringURL { + [[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:stringURL]]; +} + +- (IBAction)browseForFiles:(id)sender { + NSOpenPanel *oPanel = [NSOpenPanel openPanel]; + + [oPanel setAllowsMultipleSelection:YES]; + [oPanel setCanChooseDirectories:YES]; + [oPanel setResolvesAliases:YES]; + [oPanel setAllowedFileTypes:[filesController fileTypes]]; + + [oPanel beginSheetModalForWindow:[tableView window] + completionHandler:^(NSInteger returnCode) { + if (returnCode == NSModalResponseOK) { + NSWindow *myWindow = [self->tableView window]; + [myWindow setStyleMask:[myWindow styleMask] | NSWindowStyleMaskResizable]; + [self->filesController setRow:-1]; + [self->filesController addURLs:oPanel.URLs]; + } + }]; +} + +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { + return YES; +} + +- (void)applicationWillTerminate:(NSNotification *)n { + [filesController cleanup]; +} + +- (NSString *)version { + return [[NSBundle mainBundle] infoDictionary][@"CFBundleShortVersionString"]; +} + +// Quick Look panel support +- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel *)panel; +{ + return YES; +} + +- (void)beginPreviewPanelControl:(QLPreviewPanel *)panel { + // This document is now responsible of the preview panel + // It is allowed to set the delegate, data source and refresh panel. + previewPanel = panel; + panel.delegate = self; + panel.dataSource = self; +} + +- (void)endPreviewPanelControl:(QLPreviewPanel *)panel { + // This document loses its responsisibility on the preview panel + // Until the next call to -beginPreviewPanelControl: it must not + // change the panel's delegate, data source or refresh it. + previewPanel = nil; +} + +// Quick Look panel data source +- (NSInteger)numberOfPreviewItemsInPreviewPanel:(QLPreviewPanel *)panel { + return [[filesController selectedObjects] count]; +} + +- (id)previewPanel:(QLPreviewPanel *)panel previewItemAtIndex:(NSInteger)index { + return [filesController selectedObjects][index]; +} + +// Quick Look panel delegate +- (BOOL)previewPanel:(QLPreviewPanel *)panel handleEvent:(NSEvent *)event { + // redirect all key down events to the table view + if ([event type] == NSEventTypeKeyDown) { + [tableView keyDown:event]; + return YES; + } + return NO; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { + SEL action = [menuItem action]; + if (action == @selector(startAgain:)) { + return [filesController canStartAgainOptimized:NO]; + } else if (action == @selector(startAgainOptimized:)) { + return [filesController canStartAgainOptimized:YES]; + } else if (action == @selector(clearComplete:)) { + return [filesController canClearComplete]; + } else if (action == @selector(revert:)) { + return [filesController canRevert]; + } else if (action == @selector(stop:)) { + return [filesController isStoppable]; + } + + return [menuItem isEnabled]; +} + +// This delegate method provides the rect on screen from which the panel will zoom. +- (NSRect)previewPanel:(QLPreviewPanel *)panel sourceFrameOnScreenForPreviewItem:(id)item { + NSInteger index = [[filesController arrangedObjects] indexOfObject:item]; + if (index == NSNotFound) { + return NSZeroRect; + } + + NSRect iconRect = [tableView frameOfCellAtColumn:0 row:index]; + + // check that the icon rect is visible on screen + NSRect visibleRect = [tableView visibleRect]; + + if (!NSIntersectsRect(visibleRect, iconRect)) { + return NSZeroRect; + } + + // convert icon rect to screen coordinates + iconRect.origin = [tableView convertPoint:iconRect.origin toView:nil]; + iconRect = [tableView.window convertRectToScreen:iconRect]; + + return iconRect; +} + +@end diff --git a/imageoptim/ImageOptimVerbs.sdef b/imageoptim/ImageOptimVerbs.sdef new file mode 100755 index 00000000..168dbb1f --- /dev/null +++ b/imageoptim/ImageOptimVerbs.sdef @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/imageoptim/ImageOptimize/ExtensionController.h b/imageoptim/ImageOptimize/ExtensionController.h new file mode 100644 index 00000000..a1a8c47a --- /dev/null +++ b/imageoptim/ImageOptimize/ExtensionController.h @@ -0,0 +1,18 @@ +// +// ExtensionController.h +// Optimize +// +// Created by Kornel on 18/04/2015. +// +// + +@import Cocoa; + +@class Job, JobQueue; + +@interface ExtensionController : NSViewController + +@property (strong) Job *currentFile; +@property IBOutlet NSTextField *status; +@property (strong) JobQueue *jobQueue; +@end diff --git a/imageoptim/ImageOptimize/ExtensionController.m b/imageoptim/ImageOptimize/ExtensionController.m new file mode 100644 index 00000000..2d282a59 --- /dev/null +++ b/imageoptim/ImageOptimize/ExtensionController.m @@ -0,0 +1,140 @@ +// +// ExtensionController.m +// Optimize +// +// Created by Kornel on 18/04/2015. +// +// + +#import "ExtensionController.h" +#import "JobQueue.h" +#import "Job.h" +#import "File.h" +#import "SharedPrefs.h" + +@interface ExtensionController () + +@end + +@implementation ExtensionController { + NSURL *tempFilePath; +} + +- (NSString *)nibName { + return @"ExtensionController"; +} + +- (void)loadView { + @try { + [super loadView]; + + NSExtensionItem *inputItem = self.extensionContext.inputItems.firstObject; + NSItemProvider *provider = inputItem.attachments.firstObject; + NSLog(@"Got %d input items with %d attachments", (int)self.extensionContext.inputItems.count, (int)inputItem.attachments.count); + + if (!inputItem || !provider) { + NSLog(@"No items sent to the extension, nothing to optimize"); + [self cancel:self]; + return; + } + + if (![provider hasItemConformingToTypeIdentifier:@"public.image"]) { + NSLog(@"Invoked on non-image"); + [self cancel:self]; + return; + } + + NSLog(@"ImageOptim extension loading image"); + tempFilePath = [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:[[NSUUID UUID] UUIDString]]]; + NSURL *tmpFilePathCopy = tempFilePath; + [provider loadItemForTypeIdentifier:@"public.image" + options:nil + completionHandler:^(id providedImage, NSError *error) { + NSData *data = (NSData *)providedImage; + if (![data isKindOfClass:[NSData class]]) { + NSLog(@"Received something that's not NSData"); + [self cancel:self]; + return; + } + + NSLog(@"Writing to %@", tmpFilePathCopy); + if (![data writeToURL:tmpFilePathCopy atomically:NO]) { + NSLog(@"Failed writing %@", tmpFilePathCopy); + [self cancel:self]; + return; + } + + dispatch_async(dispatch_get_global_queue(0, 0), ^{ + Job *f = [[Job alloc] initWithFilePath:tmpFilePathCopy resultsDatabase:nil]; + self.currentFile = f; + NSUserDefaults *defaults = IOSharedPrefs(); + [defaults registerDefaults:@{ + @"AdvPngEnabled" : @(YES), + @"AdvPngLevel" : @(4), + @"ZopfliEnabled" : @(YES), + @"PngOutRemoveChunks" : @(YES), + @"PreservePermissions" : @(NO), + @"PreserveDates" : @(NO), + @"RunLowPriority" : @(NO), + @"JpegTranEnabled" : @(YES), + @"JpegTranStripAll" : @(YES), + @"GifsicleEnabled" : @(YES), + @"PngMinQuality" : @(70), + @"JpegOptimMaxQuality" : @(80), + @"LossyEnabled" : @(YES), + }]; + + self.jobQueue = [[JobQueue alloc] initWithCPUs:0 dirs:1 files:1 defaults:defaults]; + [self.jobQueue addJob:f]; + [self.jobQueue wait]; + + BOOL optimized = [f isOptimized]; + [[self status] setStringValue: + optimized ? [@"Optimized with " stringByAppendingString:[f bestToolName]] + : @"Already optimized"]; + sleep(1); + self.currentFile = nil; + + if (optimized) { + NSItemProvider *result = [[NSItemProvider alloc] initWithContentsOfURL:tmpFilePathCopy]; + inputItem.attachments = @[ result ]; + [self.extensionContext completeRequestReturningItems:@[ inputItem ] + completionHandler:^(BOOL res) { + NSLog(@"Returned image %d > %d (%d)", [f byteSizeOriginal].intValue, (int)f.savedOutput.byteSize, (int)res); + [[NSFileManager defaultManager] removeItemAtURL:tmpFilePathCopy error:nil]; + self->tempFilePath = nil; + }]; + } else { + NSLog(@"Could not optimize, giving up"); + [self cancel:self]; + } + }); + }]; + + } @catch (NSException *e) { + NSLog(@"Failed %@", e); + [self cancel:self]; + } +} + +- (IBAction)stop:(id)sender { + if (self.currentFile && [self.currentFile isStoppable] && [self.currentFile isBusy]) { + NSLog(@"Stopping"); + [self.currentFile stop]; + } else { + NSLog(@"User cancelled"); + [self cancel:sender]; + } +} + +- (IBAction)cancel:(id)sender { + NSLog(@"Cancelled"); + if (tempFilePath) { + [[NSFileManager defaultManager] removeItemAtURL:tempFilePath error:nil]; + tempFilePath = nil; + } + NSError *cancelError = [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil]; + [self.extensionContext cancelRequestWithError:cancelError]; +} + +@end diff --git a/imageoptim/ImageOptimize/ExtensionController.xib b/imageoptim/ImageOptimize/ExtensionController.xib new file mode 100644 index 00000000..cdf42b9d --- /dev/null +++ b/imageoptim/ImageOptimize/ExtensionController.xib @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/imageoptim/ImageOptimize/ImageOptimize.entitlements b/imageoptim/ImageOptimize/ImageOptimize.entitlements new file mode 100644 index 00000000..e3c67461 --- /dev/null +++ b/imageoptim/ImageOptimize/ImageOptimize.entitlements @@ -0,0 +1,17 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.application-groups + + 59KZTZA4XR.net.pornel.ImageOptim + + com.apple.security.files.user-selected.read-only + + com.apple.security.get-task-allow + + + + diff --git a/imageoptim/ImageOptimize/Info.plist b/imageoptim/ImageOptimize/Info.plist new file mode 100644 index 00000000..b4d689d6 --- /dev/null +++ b/imageoptim/ImageOptimize/Info.plist @@ -0,0 +1,47 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ImageOptimize + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + $(CURRENT_PROJECT_VERSION) + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + CFBundleIconFile + ImageOptim.icns + NSExtension + + NSExtensionAttributes + + NSExtensionActivationRule + + NSExtensionActivationSupportsImageWithMaxCount + 1 + + NSExtensionServiceRoleType + NSExtensionServiceRoleTypeEditor + + NSExtensionPointIdentifier + com.apple.ui-services + NSExtensionPrincipalClass + ExtensionController + + + diff --git a/imageoptim/Info.plist b/imageoptim/Info.plist index 80311a06..c20203e7 100644 --- a/imageoptim/Info.plist +++ b/imageoptim/Info.plist @@ -5,7 +5,7 @@ CFBundleAllowMixedLocalizations CFBundleDevelopmentRegion - English + en CFBundleDocumentTypes @@ -54,6 +54,29 @@ NSPersistentStoreTypeKey Binary + + CFBundleTypeExtensions + + svg + SVG + + CFBundleTypeMIMETypes + + image/svg+xml + + CFBundleTypeName + SVG + CFBundleTypeRole + Editor + LSItemContentTypes + + public.svg-image + + LSTypeIsPackage + + NSPersistentStoreTypeKey + Binary + CFBundleTypeExtensions @@ -104,7 +127,7 @@ CFBundleIconFile ImageOptim.icns CFBundleIdentifier - net.pornel.ImageOptim + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -112,29 +135,61 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.4.1 + $(MARKETING_VERSION) CFBundleVersion - 1.4.1 + $(CURRENT_PROJECT_VERSION) LSApplicationCategoryType public.app-category.developer-tools - LSArchitecturePriority - - x86_64 - LSMinimumSystemVersion - 10.6.4 + ${MACOSX_DEPLOYMENT_TARGET} + NSAppleScriptEnabled + + NSHumanReadableCopyright + Free, Open Source (GNU GPL) NSMainNibFile - MainMenu + ImageOptim NSPrincipalClass NSApplication + NSServices + + + NSMenuItem + + default + ImageOptimize + + NSMessage + handleServices + NSRequiredContext + + NSApplicationIdentifier + com.apple.finder + NSTextContent + FilePath + + NSSendFileTypes + + public.png + public.jpeg + com.compuserve.gif + public.svg-image + + NSServiceDescription + Losslessly reduce image file sizes with ImageOptim + + + OSAScriptingDefinition + ImageOptimVerbs.sdef SUAllowsAutomaticUpdates SUEnableAutomaticChecks SUFeedURL - http://imageoptim.com/appcast.xml + https://imageoptim.com/appcast.xml SUPublicDSAKeyFile dsa_pub.pem + SUPublicEDKey + ZNVqPxFrHqiC9pV00O29sA9VjyX17bhob1nF8zJafxM= SUShowReleaseNotes diff --git a/imageoptim/JobProxy.h b/imageoptim/JobProxy.h new file mode 100644 index 00000000..941649e3 --- /dev/null +++ b/imageoptim/JobProxy.h @@ -0,0 +1,36 @@ +// +// JobProxy.h +// ImageOptim +// +// Created by Kornel on 17/11/2018. +// + +@import Cocoa; + +@class ResultsDb, File, TempFile, Job; + +NS_ASSUME_NONNULL_BEGIN + +@interface JobProxy : NSObject { + Job *job; +} + +- (Job *)job; +- (BOOL)stop; +- (BOOL)revert; +- (File *)savedOutputOrInput; +- (nullable instancetype)initWithJob:(Job *)job; +- (id)copyWithZone:(nullable NSZone *)zone; + +@property (readonly, nonatomic) BOOL canRevert, isDone, isFailed, isBusy, isStoppable, isOptimized; +@property (readonly, nonatomic) NSString *fileName; +@property (readonly, nonatomic) NSURL *filePath; +@property (readonly, nonatomic, nullable) NSString *statusText, *bestToolName; +@property (readonly, nonatomic) NSString *displayName; +@property (readonly, nonatomic) NSString *statusImageName; +@property (readonly, nonatomic) NSNumber *byteSizeOriginal; +@property (readonly, nonatomic) NSNumber *byteSizeOptimized; +@property (readonly, nonatomic) NSNumber *percentOptimized; + +@end +NS_ASSUME_NONNULL_END diff --git a/imageoptim/JobProxy.m b/imageoptim/JobProxy.m new file mode 100644 index 00000000..0c85e4fa --- /dev/null +++ b/imageoptim/JobProxy.m @@ -0,0 +1,208 @@ +// +// JobProxy.m +// +// Cocoa is very crashy when using bindings that may be updated from non-main thread, + +#import "Backend/Job.h" +#import "Backend/File.h" +#import "JobProxy.h" + +@interface JobProxy () { + NSMutableDictionary *props; +} +@end + +@implementation JobProxy + +- (instancetype)initWithJob:(Job *)aJob { + if (self = [self init]) { + job = aJob; + props = [NSMutableDictionary new]; + + for (NSString *prop in [JobProxy propertiesToProxy]) { + id val = [job valueForKey:prop]; + [props setObject:val ? val : [NSNull null] forKey:prop]; + [job addObserver:self + forKeyPath:prop + options:NSKeyValueObservingOptionPrior | NSKeyValueObservingOptionNew + context:NULL]; + } + } + return self; +} + +- (Job *)job { + return job; +} + +- (BOOL)revert { + return [job revert]; +} + +- (BOOL)stop { + return [job stop]; +} + +- (void)cleanup { + [job cleanup]; +} + +- (NSURL *)previewItemURL { + return [job previewItemURL]; +} + +- (NSString *)previewItemTitle { + return [job previewItemTitle]; +} + +- (void)forwardInvocation:(NSInvocation *)invocation { + SEL aSelector = [invocation selector]; + + if ([job respondsToSelector:aSelector]) + [invocation invokeWithTarget:job]; + else + [super forwardInvocation:invocation]; +} + +- (BOOL)canRevert { + return [job canRevert]; +} + +- (BOOL)isDone { + return [[props objectForKey:@"isDone"] boolValue]; +} + +- (BOOL)isFailed { + return [[props objectForKey:@"isFailed"] boolValue]; +} + +- (BOOL)isBusy { + return [[props objectForKey:@"isBusy"] boolValue]; +} + +- (BOOL)isStoppable { + return [job isStoppable]; +} + +- (BOOL)isOptimized { + return [[props objectForKey:@"isOptimized"] boolValue]; +} + +- (NSURL *)filePath { + return [job filePath]; +} + +- (NSString *)fileName { + return [job fileName]; +} + +static id nullToNil(id maybeNull) { + if (maybeNull == [NSNull null]) return nil; + return maybeNull; +} + +- (NSString *)statusText { + return nullToNil([props objectForKey:@"statusText"]); +} + +- (NSString *)bestToolName { + return nullToNil([props objectForKey:@"bestToolName"]); +} + +- (NSString *)displayName { + return [job displayName]; +} + +- (NSString *)statusImageName { + return nullToNil([props objectForKey:@"statusImageName"]); +} + +- (NSNumber *)byteSizeOptimized { + return nullToNil([props objectForKey:@"byteSizeOptimized"]); +} + +- (NSNumber *)byteSizeOriginal { + return nullToNil([props objectForKey:@"byteSizeOriginal"]); +} + +- (File *)savedOutput { + return nullToNil([props objectForKey:@"savedOutput"]); +} + +- (File *)savedOutputOrInput { + return job.savedOutput ? job.savedOutput : job.unoptimizedInput; +} + +- (File *)percentOptimized { + return nullToNil([props objectForKey:@"percentOptimized"]); +} + +- (NSString *)description { + return [NSString stringWithFormat:@"Proxy for {%@}", job]; +} + ++ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)theKey { + return ![[JobProxy propertiesToProxy] containsObject:theKey]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { + BOOL isPrior = [[change valueForKey:@"notificationIsPrior"] boolValue]; + NSLog(@"observed prior=%d main=%d %@ %@", (int)isPrior, (int)[NSThread isMainThread], keyPath, change); + BOOL isPercentRelated = [keyPath isEqualToString:@"byteSizeOptimized"] || + [keyPath isEqualToString:@"byteSizeOriginal"] || + [keyPath isEqualToString:@"savedOutput"] || + [keyPath isEqualToString:@"isDone"]; + void (^cb)(void) = ^{ + if (isPrior) { + // hoping Cocoa will not do anything silly on the main thread while observing unchanged value + [self willChangeValueForKey:keyPath]; + if (isPercentRelated) { + [self willChangeValueForKey:@"percentOptimized"]; + } + } else { + id new = change[@"new"]; + [self->props setObject:new forKey:keyPath]; + if (isPercentRelated) { + [self didChangeValueForKey:@"percentOptimized"]; + } + NSLog(@"Did change %@ to %@", keyPath, new); + [self didChangeValueForKey:keyPath]; + } + }; + + // ensure didChangeValueForKey is always on the main thread, as otherwise Cocoa bindings are very crashy + if ([NSThread isMainThread]) { + cb(); + } else { + dispatch_async(dispatch_get_main_queue(), cb); + } +} + +- (void)dealloc { + for (NSString *prop in [JobProxy propertiesToProxy]) { + [job removeObserver:self forKeyPath:prop]; + } +} + +- (nonnull id)copyWithZone:(nullable NSZone *)zone { + return [[JobProxy allocWithZone:zone] initWithJob:job]; +} + ++ (NSArray *)propertiesToProxy { + return @[ + @"bestToolName", + @"byteSizeOptimized", + @"byteSizeOriginal", + @"isBusy", + @"isDone", + @"isFailed", + @"isOptimized", + @"percentOptimized", + @"savedOutput", + @"statusImageName", + @"statusOrder", + @"statusText", + ]; +} + +@end diff --git a/imageoptim/Makefile b/imageoptim/Makefile index 75acc1cb..2686d835 100644 --- a/imageoptim/Makefile +++ b/imageoptim/Makefile @@ -1,22 +1,27 @@ -SPARKLE=$(TARGET_BUILD_DIR)/Sparkle.framework +HELPINDEXES=$(addsuffix Help.helpindex, $(wildcard *.lproj/Help/)) +SUBMODULES=../Sparkle/Sparkle ../svgcleaner/src -all: $(SPARKLE) pngout +build: all -$(SPARKLE): /tmp/sparkle.zip - -rm -rf $(SPARKLE) - unzip -o /tmp/sparkle.zip 'With Garbage Collection/*' && mv 'With Garbage Collection/Sparkle.framework' $(SPARKLE) - -rm -rf 'With Garbage Collection' - -rm -rf $(SPARKLE)/Versions/A/Resources/fr_CA.lproj +all: $(SUBMODULES) pngout helpindexes -/tmp/sparkle.zip: - curl http://sparkle.andymatuschak.org/files/Sparkle%201.5b6.zip -o /tmp/sparkle.zip +$(SUBMODULES): ../.gitmodules + ../scripts/fetch-submodule $(shell dirname $@) && touch $@ pngout: - curl http://static.jonof.id.au/dl/kenutils/pngout-20120530-darwin.tar.gz | tar xz - mv pngout-20120530-darwin pngout + curl -LO https://www.jonof.id.au/files/kenutils/pngout-20230322-mac.zip + unzip -p pngout-20230322-mac.zip pngout-20230322-mac/pngout > pngout + chmod a+rx pngout + codesign -s "Developer ID" ./pngout --force clean: - -rm -rf $(SPARKLE) pngout /tmp/sparkle.zip + -rm -rf pngout pngout-20230322-mac.zip install: +helpindexes:: $(HELPINDEXES) + +%/Help.helpindex: %/index.html %/prefs.html + ./makehelp.sh $(patsubst %.lproj/Help/Help.helpindex,%,$@) + +.PHONY: build all install clean diff --git a/imageoptim/MyTableView.h b/imageoptim/MyTableView.h index fdc6426a..46ea968c 100644 --- a/imageoptim/MyTableView.h +++ b/imageoptim/MyTableView.h @@ -1,14 +1,15 @@ /* MyTableView */ -#import +@import Cocoa; @class RevealButtonCell; -@interface MyTableView : NSTableView -{ +@interface MyTableView : NSTableView { NSInteger iMouseRow, iMouseCol; RevealButtonCell *iMouseCell; } - (IBAction)delete:(id)sender; --(void)openInFinder; +- (IBAction)copyAsDataURI:(id)sender; +- (IBAction)openInFinder:(id)sender; +- (void)quickLook; @end diff --git a/imageoptim/MyTableView.m b/imageoptim/MyTableView.m index 1f9e8626..e8c2c602 100644 --- a/imageoptim/MyTableView.m +++ b/imageoptim/MyTableView.m @@ -1,55 +1,143 @@ #import "MyTableView.h" -#import "FilesQueue.h" +#import "FilesController.h" #import "RevealButtonCell.h" +#import "JobProxy.h" +#import "File.h" +#import "log.h" +@import Quartz; @implementation MyTableView +- (void)removeObjects:(NSArray *)objects { + FilesController *f = (FilesController *)[self delegate]; -- (IBAction)delete:(id)sender -{ - [(FilesQueue*)[self delegate] delete:sender]; + [[self undoManager] registerUndoWithTarget:self selector:@selector(addObjects:) object:objects]; + [f removeObjects:objects]; } -- (IBAction)copy:(id)sender -{ - [(FilesQueue*)[self delegate] copyObjects]; +- (void)addObjects:(NSArray *)objects { + FilesController *f = (FilesController *)[self delegate]; + + [[self undoManager] registerUndoWithTarget:self selector:@selector(removeObjects:) object:objects]; + [f addObjects:objects]; +} + +- (IBAction)delete:(id)sender { + FilesController *f = (FilesController *)[self delegate]; + [self removeObjects:[f selectedObjects]]; +} + +- (IBAction)copy:(id)sender { + FilesController *f = (FilesController *)[self delegate]; + + NSArray *selected = [f selectedObjects]; + NSMutableArray *filePaths = [NSMutableArray arrayWithCapacity:[selected count]]; + NSMutableArray *fileNames = [NSMutableArray arrayWithCapacity:[selected count]]; + for (JobProxy *job in selected) { + assert([job isKindOfClass:[JobProxy class]]); + NSString *path = job.filePath.path; + if (path) { + [filePaths addObject:path]; + [fileNames addObject:[path.lastPathComponent stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLPathAllowedCharacterSet]]]; + } + }; + if ([filePaths count]) { + NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + + [pboard declareTypes:@[ NSFilenamesPboardType, NSStringPboardType ] owner:self]; + [pboard setPropertyList:filePaths forType:NSFilenamesPboardType]; + [pboard setString:[fileNames componentsJoinedByString:@"\n"] forType:NSStringPboardType]; + } +} + +- (BOOL)allowsVibrancy { + return false; } -- (IBAction)cut:(id)sender -{ - [(FilesQueue*)[self delegate] cutObjects]; +- (NSArray *)filesForDataURI { + FilesController *f = (FilesController *)[self delegate]; + + NSArray *selectedFiles = [f selectedObjects]; + NSMutableArray *files = [NSMutableArray arrayWithCapacity:[selectedFiles count]]; + NSUInteger totalSize = 0; + for (JobProxy *job in selectedFiles) { + assert([job isKindOfClass:[JobProxy class]]); + if (![job isDone]) continue; + File *file = [job savedOutputOrInput]; + if (!file || file.byteSize > 100000) continue; + totalSize += file.byteSize; + if (totalSize > 1000000) break; + [files addObject:file]; + } + return files; +} + +- (IBAction)copyAsDataURI:(id)sender { + NSMutableArray *urls = [NSMutableArray new]; + for (File *file in [self filesForDataURI]) { + NSData *data = [NSData dataWithContentsOfURL:file.path]; + + NSString *type = [file mimeType]; + if (!type) continue; + + NSString *url = [[NSString stringWithFormat:@"data:%@;base64,", type] + stringByAppendingString:[data base64EncodedStringWithOptions:0]]; + + [urls addObject:url]; + } + + NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + + [pboard declareTypes:@[ NSStringPboardType ] owner:nil]; + [pboard setString:[urls componentsJoinedByString:@"\n"] forType:NSStringPboardType]; } -- (IBAction)paste:(id)sender -{ - [(FilesQueue*)[self delegate] pasteObjects]; +- (IBAction)cut:(id)sender { + [self copy:sender]; + [self delete:sender]; + [[self undoManager] setActionName:NSLocalizedString(@"Cut", @"undo command name")]; } -- (BOOL)validateMenuItem:(NSMenuItem*)menuItem -{ - SEL action = [menuItem action]; +- (IBAction)paste:(id)sender { + NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + + NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType]; + NSMutableArray *urls = [NSMutableArray arrayWithCapacity:[paths count]]; + for (NSString *path in paths) { + [urls addObject:[NSURL fileURLWithPath:path]]; + } - if (action == @selector(delete:) || action == @selector(copy:) || action == @selector(cut:)) { - return [self selectedRow]>=0; - } else if (action == @selector(paste:)) { - NSPasteboard *pboard = [NSPasteboard generalPasteboard]; - NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType]; - return [paths count]>0; - } else if (action == @selector(selectAll:)) { - return [self numberOfRows]>0; - } - return [menuItem isEnabled]; + FilesController *f = (FilesController *)[self delegate]; + [f addURLsBelowSelection:urls]; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { + SEL action = [menuItem action]; + + if (action == @selector(delete:) || action == @selector(copy:) || action == @selector(cut:)) { + return [self numberOfSelectedRows] > 0; + } else if (action == @selector(copyAsDataURI:)) { + NSData *data = [NSData data]; + return [data respondsToSelector:@selector(base64Encoding)] && [self numberOfSelectedRows] > 0 && [[self filesForDataURI] count] > 0; + } else if (action == @selector(paste:)) { + NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + NSArray *paths = [pboard propertyListForType:NSFilenamesPboardType]; + return [paths count] > 0; + } else if (action == @selector(selectAll:)) { + return [self numberOfRows] > 0; + } + return [menuItem isEnabled]; } - (void)keyDown:(NSEvent *)theEvent { if (![theEvent isARepeat] && [self numberOfSelectedRows]) { switch ([theEvent keyCode]) { case 49: /*space*/ - [(FilesQueue*)[self delegate] quickLook]; + [self quickLook]; return; case 51: /*backspace*/ case 117: /*delete*/ - [(FilesQueue*)[self delegate] delete:self]; + [self delete:self]; return; } } @@ -57,13 +145,11 @@ - (void)keyDown:(NSEvent *)theEvent { [super keyDown:theEvent]; } - // Tracking rect support - (void)updateTrackingAreas { - for (NSTrackingArea *area in [self trackingAreas]) { // We have to uniquely identify our own tracking areas - if (([area owner] == self) && ([[area userInfo] objectForKey:@"Row"] != nil)) { + if (([area owner] == self) && ([area userInfo][@"Row"] != nil)) { [self removeTrackingArea:area]; } } @@ -72,32 +158,34 @@ - (void)updateTrackingAreas { NSRange visibleRows = [self rowsInRect:[self visibleRect]]; NSIndexSet *visibleColIndexes = [self columnIndexesInRect:[self visibleRect]]; - NSPoint mouseLocation = [self convertPoint:[[self window] convertScreenToBase:[NSEvent mouseLocation]] fromView:nil]; + CGRect rect = [self.window convertRectFromScreen:(CGRect){ + .origin = [NSEvent mouseLocation], + }]; + NSPoint mouseLocation = [self convertPoint:rect.origin fromView:nil]; - for (NSInteger row = visibleRows.location; row < visibleRows.location + visibleRows.length; row++ ) { + for (NSInteger row = visibleRows.location; row < visibleRows.location + visibleRows.length; row++) { // If it is a "full width" cell, we don't have to go through the rows for (NSInteger col = [visibleColIndexes firstIndex]; col != NSNotFound; col = [visibleColIndexes indexGreaterThanIndex:col]) { NSCell *cell = [self preparedCellAtColumn:col row:row]; if ([cell isKindOfClass:[RevealButtonCell class]]) { RevealButtonCell *imagecell = (id)cell; - NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithInteger:col], @"Col", - [NSNumber numberWithInteger:row], @"Row", nil]; + NSDictionary *userInfo = @{@"Col": @(col), + @"Row": @(row)}; [imagecell addTrackingAreasForView:self inRect:[self frameOfCellAtColumn:col row:row] - withUserInfo:userInfo mouseLocation:mouseLocation]; + withUserInfo:userInfo mouseLocation:mouseLocation]; } } } } --(void)setMouseEntered:(BOOL)entered fromEvent:(NSEvent*)event { +- (void)setMouseEntered:(BOOL)entered fromEvent:(NSEvent *)event { // Delegate this to the appropriate cell. In order to allow the cell to maintain state, we copy it and use the copy until the mouse is moved outside of the cell. NSDictionary *userInfo = [event userData]; NSNumber *row = [userInfo valueForKey:@"Row"]; NSNumber *col = [userInfo valueForKey:@"Col"]; if (row && col) { NSInteger rowVal = [row integerValue], colVal = [col integerValue]; - RevealButtonCell *cell = (RevealButtonCell*)[self preparedCellAtColumn:colVal row:rowVal]; + RevealButtonCell *cell = (RevealButtonCell *)[self preparedCellAtColumn:colVal row:rowVal]; assert([cell isKindOfClass:[RevealButtonCell class]]); if (iMouseCell != cell) { @@ -122,7 +210,6 @@ - (void)mouseExited:(NSEvent *)event { iMouseRow = -1; } - /* Since NSTableView/NSOutineView uses the same cell to "stamp" out each row, we need to send the mouseEntered/mouseExited events each time it is drawn. The easy hook for this is the preparedCell method. */ - (NSCell *)preparedCellAtColumn:(NSInteger)column row:(NSInteger)row { @@ -144,39 +231,41 @@ - (void)updateCell:(NSCell *)aCell { } } +- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal { + if (isLocal) return NSDragOperationMove; - -- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal -{ - if (isLocal) return NSDragOperationMove; - - return NSDragOperationCopy; - + return NSDragOperationCopy | NSDragOperationGeneric; } - --(void)openRowInPreview -{ - if ([self clickedRow] < 0) return; - [self openInFinder]; +- (void)quickLook { + if ([QLPreviewPanel sharedPreviewPanelExists] && [[QLPreviewPanel sharedPreviewPanel] isVisible]) { + [[QLPreviewPanel sharedPreviewPanel] orderOut:nil]; + } else { + [[QLPreviewPanel sharedPreviewPanel] makeKeyAndOrderFront:nil]; + } } --(void)awakeFromNib -{ - [self setDoubleAction:@selector(openRowInPreview)]; +- (void)awakeFromNib { + [self setDoubleAction:@selector(openInFinder:)]; } --(void)openInPreview -{ - FilesQueue *fc = (FilesQueue *)[self delegate]; - assert([fc isKindOfClass:[FilesQueue class]]); - [fc openRowInFinder:[self clickedRow] withPreview:YES]; +- (NSArray *)clickedRowSelection { + FilesController *fc = (FilesController *)[self delegate]; + assert([fc isKindOfClass:[FilesController class]]); + + NSInteger row = [self clickedRow]; + if (row < 0) { + return nil; + } else if ([self isRowSelected:row] && [self numberOfSelectedRows] > 1) { + return [fc selectedObjects]; + } else { + return @[ [fc arrangedObjects][row] ]; + } } --(void)openInFinder -{ - FilesQueue *fc = (FilesQueue *)[self delegate]; - assert([fc isKindOfClass:[FilesQueue class]]); - [fc openRowInFinder:[self clickedRow] withPreview:NO]; +- (void)openInFinder:(id)sender { + NSArray *files = [self clickedRowSelection]; + if (!files) return; // double-click on header + [[NSWorkspace sharedWorkspace] activateFileViewerSelectingURLs:[files valueForKey:@"filePath"]]; } @end diff --git a/imageoptim/PrefsController.h b/imageoptim/PrefsController.h index 4d12b3de..def857a8 100644 --- a/imageoptim/PrefsController.h +++ b/imageoptim/PrefsController.h @@ -4,29 +4,15 @@ // Created by porneL on 24.wrz.07. // -#import -@class ImageOptim; +@import Cocoa; +@class ImageOptimController; @interface PrefsController : NSWindowController { - ImageOptim *owner; - - NSSlider *tasksSlider; - NSArrayController *chunksController; - - int maxNumberOfTasks; - int recommendedNumberOfTasks; - int criticalNumberOfTasks; + BOOL notified; } +@property IBOutlet NSTabView *tabs; +@property (readonly) BOOL svgSupported; --(void)windowDidLoad; - --(IBAction)browseForExecutable:(id)sender; --(void)showWindow:(id)sender; --(IBAction)addGammaChunks:(id)sender; --(IBAction)showHelp:(id)sender; -@property (retain) IBOutlet NSSlider *tasksSlider; -@property (retain) IBOutlet NSArrayController *chunksController; -@property (readonly) int maxNumberOfTasks; -@property (readonly) int recommendedNumberOfTasks; -@property (readonly) int criticalNumberOfTasks; +- (IBAction)showHelp:(id)sender; +- (IBAction)showLossySettings:(id)sender; @end diff --git a/imageoptim/PrefsController.m b/imageoptim/PrefsController.m index beeb2f86..f3a57541 100644 --- a/imageoptim/PrefsController.m +++ b/imageoptim/PrefsController.m @@ -5,110 +5,87 @@ // #import "PrefsController.h" -#import "ImageOptim.h" +#import "ImageOptimController.h" #import "Transformers.h" +static const char *kGuetzliContext = "guetzli"; +static const char *kStripAllContext = "strip"; + @implementation PrefsController --(id)init -{ - if ((self = [super initWithWindowNibName:@"PrefsController"])) - { - int cpus = [ImageOptim numberOfCPUs]; - maxNumberOfTasks = MIN(cpus*6, MAX(8, cpus * 2 + 2)); - recommendedNumberOfTasks = cpus+2 + (cpus>6?1:0); - criticalNumberOfTasks = (maxNumberOfTasks + recommendedNumberOfTasks)/2; - - CeilFormatter *cf = [CeilFormatter new]; - [NSValueTransformer setValueTransformer:cf forName:@"CeilFormatter"]; - - DisabledColor *dc = [DisabledColor new]; - [NSValueTransformer setValueTransformer:dc forName:@"DisabledColor"]; - } -// NSLog(@"init prefs %@",self); - return self; -} +- (instancetype)init { + if ((self = [super initWithWindowNibName:@"PrefsController"])) { + CeilFormatter *cf = [CeilFormatter new]; + [NSValueTransformer setValueTransformer:cf forName:@"CeilFormatter"]; + DisabledColor *dc = [DisabledColor new]; + [NSValueTransformer setValueTransformer:dc forName:@"DisabledColor"]; --(IBAction)addGammaChunks:(id)sender -{ - NSArray *chunks = [NSArray arrayWithObjects:@"gAMA",@"sRGB",@"iCCP",@"cHRM",nil]; - NSString *name; - NSArray *content = [chunksController arrangedObjects]; - BOOL done = NO; - - for(name in chunks) - { - NSDictionary *chunk = [NSDictionary dictionaryWithObject:name forKey:@"name"]; - if (NSNotFound == [content indexOfObject:chunk]) - { - [chunksController addObject:chunk]; - done = YES; - } - } - if (!done) NSBeep(); + [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"GuetzliEnabled" options:0 context:(void *)kGuetzliContext]; + [[NSUserDefaults standardUserDefaults] addObserver:self forKeyPath:@"JpegTranStripAll" options:0 context:(void *)kStripAllContext]; + } + return self; } --(IBAction)browseForExecutable:(id)sender -{ - static NSString *const keys[] = {@"JpegOptim",@"AdvPng",@"OptiPng",@"PngCrush",@"PngOut",@"JpegTran",@"Gifsicle"}; - NSInteger tag = [sender tag]; - if (tag >= 1 && tag <= sizeof(keys)/sizeof(keys[0])) - { - NSString *key = keys[tag-1]; - - NSOpenPanel *oPanel = [NSOpenPanel openPanel]; - - [oPanel setAllowsMultipleSelection:NO]; - [oPanel setCanChooseDirectories:NO]; - [oPanel setResolvesAliases:YES]; - - [oPanel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger returnCode) { - if (returnCode == NSOKButton) { - NSString *file = [[oPanel filenames] lastObject]; - if (file) { - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - [defs setObject:file forKey:[key stringByAppendingString:@"Path"]]; - } +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)defaults + change:(NSDictionary *)change + context:(void *)context { + if (context == (void *)kGuetzliContext) { + if ([defaults boolForKey:@"GuetzliEnabled"]) { + if (!notified) { + notified = YES; + [self warnGuetzliSlowness]; + } + if ([defaults integerForKey:@"JpegOptimMaxQuality"] < 85) { + [defaults setInteger:85 forKey:@"JpegOptimMaxQuality"]; } - }]; - } + if (![defaults boolForKey:@"JpegTranStripAll"]) { + [defaults setBool:YES forKey:@"JpegTranStripAllSetByGuetzli"]; + [defaults setBool:YES forKey:@"JpegTranStripAll"]; + } + } else if ([defaults boolForKey:@"JpegTranStripAll"] && [defaults boolForKey:@"JpegTranStripAllSetByGuetzli"]) { + [defaults setBool:NO forKey:@"JpegTranStripAllSetByGuetzli"]; + [defaults setBool:NO forKey:@"JpegTranStripAll"]; + } + } else if (context == (void *)kStripAllContext) { + if ([defaults boolForKey:@"GuetzliEnabled"] && ![defaults boolForKey:@"JpegTranStripAll"]) { + [defaults setBool:NO forKey:@"JpegTranStripAllSetByGuetzli"]; + [defaults setBool:NO forKey:@"GuetzliEnabled"]; + } + } } - --(void)windowDidLoad -{ - [tasksSlider setNumberOfTickMarks:[self maxNumberOfTasks]]; - [tasksSlider setAllowsTickMarkValuesOnly:YES]; +- (void)warnGuetzliSlowness { + NSAlert *alert = [NSAlert new]; + alert.alertStyle = NSAlertStyleWarning; + alert.messageText = NSLocalizedString(@"Guetzli is very slow", "alert box"); + alert.informativeText = NSLocalizedString(@"It can take up to 30 minutes per image. Your system may be unresponsive while Guetzli is running.", "alert box"); + [alert beginSheetModalForWindow:[self window] completionHandler:nil]; } --(void)showWindow:(id)sender -{ -// NSLog(@"window show?"); - owner = sender; - [super showWindow:sender]; +- (IBAction)showLossySettings:(id)sender { + [self showWindow:sender]; + [self.tabs selectTabViewItemAtIndex:1]; } +- (IBAction)showHelp:(id)sender { + NSInteger tag = [sender tag]; + + [[self window] setHidesOnDeactivate:NO]; + + NSString *locBookName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleHelpBookName"]; + NSString *anchors[] = { @"general", @"jpegoptim", @"optipng", @"optipng", @"pngcrush", @"pngout" }; + NSString *anchor = @"main"; + + if (tag >= 1 && tag <= 6) { + anchor = anchors[tag - 1]; + } + [[NSHelpManager sharedHelpManager] openHelpAnchor:anchor inBook:locBookName]; +} --(IBAction)showHelp:(id)sender -{ - NSInteger tag = [sender tag]; - - [[self window] setHidesOnDeactivate:NO]; - - NSString *locBookName = [[NSBundle mainBundle] objectForInfoDictionaryKey: @"CFBundleHelpBookName"]; - NSString *anchors[] = {@"general", @"jpegoptim", @"advpng", @"optipng", @"pngcrush", @"pngout"}; - NSString *anchor = @"main"; - - if (tag >= 1 && tag <= 6) - { - anchor = anchors[tag-1]; - } - [[NSHelpManager sharedHelpManager] openHelpAnchor:anchor inBook:locBookName]; +// This doesn't belong here :( +- (BOOL)svgSupported { + NSFileManager *fm = [NSFileManager defaultManager]; + return [fm isExecutableFileAtPath:@"/usr/local/bin/node"] || [fm isExecutableFileAtPath:@"/opt/homebrew/bin/node"]; } -@synthesize tasksSlider; -@synthesize chunksController; -@synthesize maxNumberOfTasks; -@synthesize recommendedNumberOfTasks; -@synthesize criticalNumberOfTasks; @end diff --git a/imageoptim/ResultsDb.h b/imageoptim/ResultsDb.h new file mode 100644 index 00000000..d1a323e7 --- /dev/null +++ b/imageoptim/ResultsDb.h @@ -0,0 +1,11 @@ + +#import + +NS_ASSUME_NONNULL_BEGIN +@interface ResultsDb : NSObject { +} +- (BOOL)hasResultWithFileSize:(NSUInteger)size; +- (BOOL)getResultWithHash:(uint32_t[static 4])hash; +- (void)setUnoptimizableFileHash:(uint32_t[static 4])inputFileHash size:(NSUInteger)byteSizeOnDisk; +@end +NS_ASSUME_NONNULL_END diff --git a/imageoptim/ResultsDb.m b/imageoptim/ResultsDb.m new file mode 100644 index 00000000..d528065a --- /dev/null +++ b/imageoptim/ResultsDb.m @@ -0,0 +1,99 @@ + +#import "ResultsDb.h" +#import "log.h" +#include + +@implementation ResultsDb { + sqlite3 *db; + dispatch_queue_t sqlitequeue; +} + +typedef BOOL (^rowcallback)(int numColumns, char **values, char **columnNames); + +- (instancetype)init { + if ((self = [super init])) { + NSURL *cachesPath = [[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; + NSURL *cachesWithBundlePath = [cachesPath URLByAppendingPathComponent:[[NSBundle mainBundle] bundleIdentifier] isDirectory:YES]; + [[NSFileManager defaultManager] createDirectoryAtURL:cachesWithBundlePath withIntermediateDirectories:YES attributes:nil error:nil]; + if ([[NSFileManager defaultManager] fileExistsAtPath:[cachesPath URLByAppendingPathComponent:@"ImageOptimResults.db"].path]) { + [[NSFileManager defaultManager] moveItemAtURL:[cachesPath URLByAppendingPathComponent:@"ImageOptimResults.db"] toURL:[cachesWithBundlePath URLByAppendingPathComponent:@"Results.db"] error:nil]; + } + cachesPath = [cachesWithBundlePath URLByAppendingPathComponent:@"Results.db"]; + IODebug(@"Results cache is in %@", cachesPath.path); + if (SQLITE_OK != sqlite3_open([cachesPath.path fileSystemRepresentation], &db)) { + IOWarn(@"Failed to open db: %s", sqlite3_errmsg(db)); + sqlite3_close(db); + db = NULL; + return nil; + } + sqlitequeue = dispatch_queue_create("imageoptim sqlite", DISPATCH_QUEUE_SERIAL); + dispatch_async(sqlitequeue, ^() { + char *err; + if (SQLITE_OK != sqlite3_exec(self->db, "CREATE TABLE IF NOT EXISTS results(inputs_hashsh BLOB(16) NOT NULL PRIMARY KEY, size INT NOT NULL, status INT NOT NULL DEFAULT 0);" + "CREATE INDEX IF NOT EXISTS results_size ON results(size)", + NULL, NULL, &err)) { + IOWarn(@"Failed to create tables: %s", err); + sqlite3_free(err); + } + }); + } + return self; +} + +- (void)dealloc { + if (db) { + sqlite3 *dbtmp = db; + dispatch_sync(sqlitequeue, ^() { + sqlite3_close(dbtmp); + }); + } + sqlitequeue = nil; +} + +- (void)setUnoptimizableFileHash:(uint32_t[static 4])hash size:(NSUInteger)byteSizeOnDisk { + assert(hash[0] || hash[1] || hash[2] || hash[3]); + + [self runQuery:[NSString stringWithFormat:@"INSERT INTO results(inputs_hashsh, size, status) VALUES(x'%08x%08x%08x%08x', %lu, 1)", hash[0], hash[1], hash[2], hash[3], byteSizeOnDisk] withBlock:nil]; +} + +- (BOOL)getResultWithHash:(uint32_t[static 4])hash { + assert(hash[0] || hash[1] || hash[2] || hash[3]); + + BOOL __block found = NO; + [self runQuery:[NSString stringWithFormat:@"SELECT 1 FROM results WHERE inputs_hashsh = x'%08x%08x%08x%08x' LIMIT 1", hash[0], hash[1], hash[2], hash[3]] + withBlock:^BOOL(int c, char **a, char **b) { + found = YES; + return YES; + }]; + return found; +} + +- (BOOL)hasResultWithFileSize:(NSUInteger)size { + BOOL __block found = NO; + [self runQuery:[NSString stringWithFormat:@"SELECT 1 FROM results WHERE size = %lu LIMIT 1", (long)size] + withBlock:^BOOL(int c, char **a, char **b) { + found = YES; + return YES; + }]; + return found; +} + +static int invokeBlockCallback(void *blockp, int numColumns, char **values, char **columnNames) { + rowcallback b = (__bridge rowcallback)blockp; + return !b(numColumns, values, columnNames); +} + +- (BOOL)runQuery:(NSString *)query withBlock:(rowcallback)block { + BOOL __block res = YES; + dispatch_sync(sqlitequeue, ^() { + char *err; + if (SQLITE_OK != sqlite3_exec(self->db, [query UTF8String], block ? invokeBlockCallback : NULL, (__bridge void *)block, &err)) { + IOWarn(@"Query failed: %s in %@", err, query); + sqlite3_free(err); + res = NO; + } + }); + return res; +} + +@end diff --git a/imageoptim/RevealButtonCell.h b/imageoptim/RevealButtonCell.h index d6ff8aaa..963eee0d 100644 --- a/imageoptim/RevealButtonCell.h +++ b/imageoptim/RevealButtonCell.h @@ -1,5 +1,5 @@ -#import +@import Cocoa; @interface RevealButtonCell : NSTextFieldCell { @private @@ -7,8 +7,7 @@ BOOL iMouseHoveredInInfoButton; SEL iInfoButtonAction; } -- (SEL)infoButtonAction; -- (void)setInfoButtonAction:(SEL)action; +@property SEL infoButtonAction; - (NSRect)infoButtonRectForBounds:(NSRect)bounds; diff --git a/imageoptim/RevealButtonCell.m b/imageoptim/RevealButtonCell.m index 6a9526d4..cde8ede4 100644 --- a/imageoptim/RevealButtonCell.m +++ b/imageoptim/RevealButtonCell.m @@ -10,7 +10,7 @@ @implementation RevealButtonCell -- (id)init { +- (instancetype)init { if ((self = [super init])) { [self setLineBreakMode:NSLineBreakByTruncatingTail]; } @@ -28,7 +28,7 @@ - (void)setInfoButtonAction:(SEL)action { - (NSImage *)infoButtonImage { static NSImage *image; - if (!image) image = [NSImage imageNamed:@"reveal.png"]; + if (!image) image = [NSImage imageNamed:@"NSRevealFreestandingTemplate"]; return image; } @@ -39,13 +39,27 @@ - (NSImage *)infoButtonImage { #define PADDING_AROUND_INFO_IMAGE 2.0f #define IMAGE_SIZE 0.0f +- (NSImage *)infoButtonImageFaded { + static NSImage *image; + if (!image) { + NSImage *opaqueImage = [self infoButtonImage]; + NSRect dimensions = NSMakeRect(0, 0, INFO_IMAGE_SIZE, INFO_IMAGE_SIZE); + image = [[NSImage alloc] initWithSize:dimensions.size]; + [image lockFocus]; + [opaqueImage drawInRect:dimensions fromRect:NSZeroRect operation:NSCompositingOperationSourceOver fraction:0.3f respectFlipped:YES hints:nil]; + [image unlockFocus]; + } + return image; +} + + - (NSRect)rectForInfoButtonBasedOnTitleRect:(NSRect)titleRect inBounds:(NSRect)bounds { NSRect buttonRect = titleRect; - //display at column right - buttonRect.origin.x = NSMaxX(bounds) - INFO_IMAGE_SIZE-PADDING_BETWEEN_TITLE_AND_IMAGE; - //display directly after text - //buttonRect.origin.x = NSMaxX(titleRect) + PADDING_BETWEEN_TITLE_AND_IMAGE; + //display at column right + buttonRect.origin.x = NSMaxX(bounds) - INFO_IMAGE_SIZE-PADDING_BETWEEN_TITLE_AND_IMAGE; + //display directly after text + //buttonRect.origin.x = NSMaxX(titleRect) + PADDING_BETWEEN_TITLE_AND_IMAGE; buttonRect.origin.y += 2.0f; buttonRect.size.height = INFO_IMAGE_SIZE; buttonRect.size.width = INFO_IMAGE_SIZE; @@ -98,8 +112,7 @@ - (NSSize)cellSizeForBounds:(NSRect)bounds { return result; } -- (void)drawInteriorWithFrame:(NSRect)bounds inView:(NSView *)controlView -{ +- (void)drawInteriorWithFrame:(NSRect)bounds inView:(NSView *)controlView { NSRect titleRect = [self titleRectForBounds:bounds]; NSAttributedString *title = [self attributedStringValue]; if ([title length] > 0) { @@ -107,15 +120,18 @@ - (void)drawInteriorWithFrame:(NSRect)bounds inView:(NSView *)controlView } NSRect infoButtonRect = [self infoButtonRectForBounds:bounds]; - NSImage *image = [self infoButtonImage]; - [image setFlipped:[controlView isFlipped]]; - float opacity = iMouseHoveredInInfoButton ? 1.0f : ([self isHighlighted] ? 0.8f : 0.45f); - [image drawInRect:infoButtonRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:opacity]; + if (iMouseHoveredInInfoButton || [self isHighlighted]) { + float opacity = [self isHighlighted] ? 0.5f : 1.f; + NSImage *opaqueImage = [self infoButtonImage]; + [opaqueImage drawInRect:infoButtonRect fromRect:NSZeroRect operation:NSCompositingOperationSourceOver fraction:opacity respectFlipped:YES hints:nil]; + } else { + NSImage *fadedImage = [self infoButtonImageFaded]; + [fadedImage drawInRect:infoButtonRect fromRect:NSZeroRect operation:NSCompositingOperationSourceOver fraction:1.f respectFlipped:YES hints:nil]; + } } -- (NSUInteger)hitTestForEvent:(NSEvent *)event inRect:(NSRect)cellFrame ofView:(NSView *)controlView -{ +- (NSCellHitResult)hitTestForEvent:(NSEvent *)event inRect:(NSRect)cellFrame ofView:(NSView *)controlView { NSPoint point = [controlView convertPoint:[event locationInWindow] fromView:nil]; NSRect titleRect = [self titleRectForBounds:cellFrame]; @@ -132,7 +148,6 @@ - (NSUInteger)hitTestForEvent:(NSEvent *)event inRect:(NSRect)cellFrame ofView:( return NSCellHitNone; } - + (BOOL)prefersTrackingUntilMouseUp { // NSCell returns NO for this by default. If you want to have trackMouse:inRect:ofView:untilMouseUp: always track until the mouse is up, then you MUST return YES. Otherwise, strange things will happen. return YES; @@ -140,9 +155,8 @@ + (BOOL)prefersTrackingUntilMouseUp { // Mouse tracking -- the only part we want to track is the "info" button - (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView *)controlView untilMouseUp:(BOOL)flag { - NSRect infoButtonRect = [self infoButtonRectForBounds:cellFrame]; - while ([theEvent type] != NSLeftMouseUp) { + while ([theEvent type] != NSEventTypeLeftMouseUp) { // This is VERY simple event tracking. We simply check to see if the mouse is in the "i" button or not and dispatch entered/exited mouse events NSPoint point = [controlView convertPoint:[theEvent locationInWindow] fromView:nil]; BOOL mouseInButton = NSMouseInRect(point, infoButtonRect, [controlView isFlipped]); @@ -150,11 +164,11 @@ - (BOOL)trackMouse:(NSEvent *)theEvent inRect:(NSRect)cellFrame ofView:(NSView * iMouseDownInInfoButton = mouseInButton; [controlView setNeedsDisplayInRect:cellFrame]; } - if ([theEvent type] == NSMouseEntered || [theEvent type] == NSMouseExited) { + if ([theEvent type] == NSEventTypeMouseEntered || [theEvent type] == NSEventTypeMouseExited) { [NSApp sendEvent:theEvent]; } // Note that we process mouse entered and exited events and dispatch them to properly handle updates - theEvent = [[controlView window] nextEventMatchingMask:(NSLeftMouseUpMask | NSLeftMouseDraggedMask | NSMouseEnteredMask | NSMouseExitedMask)]; + theEvent = [[controlView window] nextEventMatchingMask:(NSEventMaskLeftMouseUp | NSEventMaskLeftMouseDragged | NSEventMaskMouseEntered | NSEventMaskMouseExited)]; } // Another way of implementing the above code would be to keep an NSButtonCell as an ivar, and simply call trackMouse:inRect:ofView:untilMouseUp: on it, if the tracking area was inside of it. @@ -191,8 +205,7 @@ - (void)addTrackingAreasForView:(NSView *)controlView inRect:(NSRect)cellFrame w [controlView addTrackingArea:area]; } -- (void)setMouseEntered:(BOOL)y -{ +- (void)setMouseEntered:(BOOL)y { iMouseHoveredInInfoButton = y; } diff --git a/imageoptim/SavingsFormatter.h b/imageoptim/SavingsFormatter.h index e2b0224a..7f1f4be9 100644 --- a/imageoptim/SavingsFormatter.h +++ b/imageoptim/SavingsFormatter.h @@ -6,6 +6,6 @@ #import -@interface SavingsFormatter : NSNumberFormatter +@interface SavingsFormatter : NSNumberFormatter @end diff --git a/imageoptim/SavingsFormatter.m b/imageoptim/SavingsFormatter.m index cc424457..62ea5b16 100644 --- a/imageoptim/SavingsFormatter.m +++ b/imageoptim/SavingsFormatter.m @@ -8,12 +8,11 @@ @implementation SavingsFormatter -- (NSString *)stringForObjectValue:(id)anObject -{ +- (NSString *)stringForObjectValue:(id)anObject { double val = [anObject doubleValue]; - + if (val < 0) return @""; - if (val < 1.0/1024.0) { + if (val < 1.0 / 1024.0) { return @"0%"; } return [super stringForObjectValue:anObject]; diff --git a/imageoptim/SharedPrefs.h b/imageoptim/SharedPrefs.h new file mode 100644 index 00000000..4f158df1 --- /dev/null +++ b/imageoptim/SharedPrefs.h @@ -0,0 +1,6 @@ + +@import Cocoa; + +NSUserDefaults *__nullable IOSharedPrefs(void); + +void IOSharedPrefsCopy(NSUserDefaults *__nonnull); diff --git a/imageoptim/SharedPrefs.m b/imageoptim/SharedPrefs.m new file mode 100644 index 00000000..4ae4e1be --- /dev/null +++ b/imageoptim/SharedPrefs.m @@ -0,0 +1,37 @@ + +#import "SharedPrefs.h" + +NSUserDefaults *IOSharedPrefs(void) { + return [[NSUserDefaults alloc] initWithSuiteName:@"59KZTZA4XR.net.pornel.ImageOptim"]; +} + +static void copyToDefs(const NSArray *__nonnull keys, const NSUserDefaults *__nonnull defs, NSUserDefaults *__nonnull shared) { + for (NSString *key in keys) { + id val = [defs objectForKey:key]; + if (val) { + [shared setObject:val forKey:key]; + } else { + [shared removeObjectForKey:key]; + } + } +} + +void IOSharedPrefsCopy(NSUserDefaults *__nonnull defs) { + // Whole dictionaryRepresentation is massive, so just copy interesting bits + const NSArray *keys = @[ + @"AdvPngEnabled", @"AdvPngLevel", @"GifsicleEnabled", + @"JpegOptimEnabled", @"JpegTranEnabled", @"JpegTranStripAll", + @"OptiPngEnabled", + @"PngCrush2Enabled", @"PngOutEnabled", + @"PngOutRemoveChunks", @"ZopfliEnabled", + @"PngMinQuality", @"JpegOptimMaxQuality", @"GifQuality", + ]; + + NSUserDefaults *shared = IOSharedPrefs(); + + copyToDefs(keys, defs, shared); + + [[NSNotificationCenter defaultCenter] addObserverForName:NSUserDefaultsDidChangeNotification object:defs queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note){ + copyToDefs(keys, defs, shared); + }]; +} diff --git a/imageoptim/Transformers.h b/imageoptim/Transformers.h index 17e4086b..2886397d 100644 --- a/imageoptim/Transformers.h +++ b/imageoptim/Transformers.h @@ -4,17 +4,16 @@ // Created by porneL on 30.wrz.07. // -#import - +@import Cocoa; @interface CeilFormatter : NSValueTransformer { - } - @end @interface DisabledColor : NSValueTransformer { - } +@end +@interface IOStatusImage : NSValueTransformer { +} @end diff --git a/imageoptim/Transformers.m b/imageoptim/Transformers.m index 0e03fc8f..c1190b63 100644 --- a/imageoptim/Transformers.m +++ b/imageoptim/Transformers.m @@ -6,39 +6,54 @@ #import "Transformers.h" - @implementation CeilFormatter -+ (Class)transformedValueClass; -{ ++ (Class)transformedValueClass { return [NSNumber class]; } -- (id)transformedValue:(id)value; -{ - double v = 1.0; - if ([value respondsToSelector: @selector(doubleValue)]) - { - v = MAX(1.0F,ceil([value doubleValue])); +- (id)transformedValue:(id)value { + double v = 1.0; + if ([value respondsToSelector:@selector(doubleValue)]) { + v = MAX(1.0F, ceil([value doubleValue])); } - return [NSNumber numberWithDouble:v]; + return @(v); } @end - @implementation DisabledColor -+ (Class)transformedValueClass; -{ ++ (Class)transformedValueClass { return [NSColor class]; } -- (id)transformedValue:(id)value; -{ - if ([value respondsToSelector: @selector(boolValue)] && ![value boolValue]) - { - return [NSColor disabledControlTextColor]; +- (id)transformedValue:(id)value { + if ([value respondsToSelector:@selector(boolValue)] && ![value boolValue]) { + return [NSColor disabledControlTextColor]; + } + return [NSColor textColor]; +} +@end + +static NSMutableDictionary *imageCache; + +@implementation IOStatusImage + ++ (Class)transformedValueClass { + return [NSImage class]; +} + +- (id)transformedValue:(id)value { + if (!value) { + value = @"err"; + } + if (!imageCache) { + imageCache = [NSMutableDictionary new]; + } + NSImage *img = imageCache[value]; + if (!img) { + imageCache[value] = img = [NSImage imageNamed:value]; } - return [NSColor textColor]; + return img; } @end diff --git a/imageoptim/Workers/AdvCompWorker.m b/imageoptim/Workers/AdvCompWorker.m deleted file mode 100644 index f19a8ba0..00000000 --- a/imageoptim/Workers/AdvCompWorker.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// AdvCompWorker.m -// -// Created by porneL on 30.wrz.07. -// - -#import "AdvCompWorker.h" -#import "../File.h" - -@implementation AdvCompWorker - --(id)init { - if (self = [super init]) - { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - level = [defaults integerForKey:@"AdvPngLevel"]; - - } - return self; -} - --(void)run -{ - NSFileManager *fm = [NSFileManager defaultManager]; - NSString *temp = [self tempPath]; - NSError *error = nil; - - if (![fm copyItemAtPath:[file filePath] toPath:temp error:&error]) - { - NSLog(@"Can't make temp copy of %@ in %@; %@",[file filePath],temp,error); - return; - } - - if (![self taskForKey:@"AdvPng" bundleName:@"advpng" - arguments:[NSArray arrayWithObjects: [NSString stringWithFormat:@"-%d",(int)(level ? level : 4)],@"-z",@"--",temp,nil]]) { - return; - } - - NSPipe *commandPipe = [NSPipe pipe]; - NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; - - [task setStandardOutput: commandPipe]; - [task setStandardError: commandPipe]; - - [self launchTask]; - - [self parseLinesFromHandle:commandHandle]; - - [commandHandle readInBackgroundAndNotify]; - [task waitUntilExit]; - - [commandHandle closeFile]; - - if ([self isCancelled]) return; - - if (![task terminationStatus] && fileSizeOptimized) - { - [file setFilePathOptimized:temp size:fileSizeOptimized toolName:@"AdvPNG"]; - } - else NSLog(@"Advpng failed"); -} - --(BOOL)parseLine:(NSString *)line -{ - NSScanner *scan = [NSScanner scannerWithString:line]; - - int original,optimized; - - if ([scan scanInt:&original] && [scan scanInt:&optimized]) - { - fileSizeOptimized = optimized; -// NSLog(@"advcomp returned %d vs %d",original,optimized); - [file setByteSize:original]; - //[file setByteSizeOptimized:optimized]; - return YES; - } - //NSLog(@"advpng: %@",line); - return NO; -} - -@end diff --git a/imageoptim/Workers/CommandWorker.h b/imageoptim/Workers/CommandWorker.h deleted file mode 100644 index 73caa7a7..00000000 --- a/imageoptim/Workers/CommandWorker.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// Worker.h -// -// Created by porneL on 23.wrz.07. -// - -#import -#import "Worker.h" -#import "../File.h" - -@interface CommandWorker : Worker { - File *file; - NSTask *task; -} --(id)initWithFile:(File *)aFile; - --(BOOL)parseLine:(NSString *)line; --(void)parseLinesFromHandle:(NSFileHandle *)commandHandle; - --(void)taskWithPath:(NSString*)path arguments:(NSArray *)arguments; - - --(long)readNumberAfter:(NSString *)str inLine:(NSString *)line; - --(void)launchTask; - --(NSString *)tempPath; - --(NSString *)executablePathForKey:(NSString *)prefsName bundleName:(NSString *)resourceName; - --(BOOL)taskForKey:(NSString *)key bundleName:(NSString *)resourceName arguments:(NSArray *)args; - -@property (retain) File *file; -@end diff --git a/imageoptim/Workers/CommandWorker.m b/imageoptim/Workers/CommandWorker.m deleted file mode 100644 index b4381914..00000000 --- a/imageoptim/Workers/CommandWorker.m +++ /dev/null @@ -1,166 +0,0 @@ -// -// Worker.m -// -// Created by porneL on 23.wrz.07. -// - -#import "CommandWorker.h" -#include -#import "../File.h" - -@implementation CommandWorker - --(id)initWithFile:(File *)aFile -{ - if (self = [self init]) - { - self.file = aFile; - } - return self; -} - --(BOOL)isRelatedTo:(File *)f -{ - return (f == file); -} - --(BOOL)parseLine:(NSString *)line -{ - /* stub */ - return NO; -} - - --(void)parseLinesFromHandle:(NSFileHandle *)commandHandle -{ - NSData *temp; - char inputBuffer[4096]; - NSInteger inputBufferPos=0; - while((temp = [commandHandle availableData]) && [temp length]) - { - const char *tempBytes = [temp bytes]; - NSInteger bytesPos=0, bytesLength = [temp length]; - - while(bytesPos < bytesLength) - { - if (tempBytes[bytesPos] == '\n' || tempBytes[bytesPos] == '\r' || inputBufferPos == sizeof(inputBuffer)-1) - { - inputBuffer[inputBufferPos] = '\0'; - if ([self parseLine:[NSString stringWithUTF8String:inputBuffer]]) - { - return; - } - inputBufferPos=0;bytesPos++; - } - else - { - inputBuffer[inputBufferPos++] = tempBytes[bytesPos++]; - } - } - } -} - --(void)taskWithPath:(NSString*)path arguments:(NSArray *)arguments; -{ - task = [NSTask new]; - - NSLog(@"Launching %@ with %@",path,arguments); - - [task setLaunchPath: path]; - [task setArguments: arguments]; - - // clone the current environment - NSMutableDictionary* - environment =[NSMutableDictionary dictionaryWithDictionary: [[NSProcessInfo processInfo] environment]]; - - // set up for unbuffered I/O - [environment setObject:@"YES" forKey:@"NSUnbufferedIO"]; - - [task setEnvironment:environment]; -} - --(void)launchTask -{ - @try - { - [task launch]; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"RunLowPriority"]) - { - int pid = [task processIdentifier]; - if (pid > 1) setpriority(PRIO_PROCESS, pid, PRIO_MAX/2); // PRIO_MAX is minimum priority. POSIX is intuitive. - } - } - @catch(NSException *e) - { - NSLog(@"Failed to launch %@ - %@",[self className],e); - } -} - --(long)readNumberAfter:(NSString *)str inLine:(NSString *)line -{ - NSRange substr = [line rangeOfString:str]; - - if (substr.length && [line length] > substr.location + [str length]) - { - NSScanner *scan = [NSScanner scannerWithString:line]; - [scan setScanLocation:substr.location + [str length]]; - - int res; - if ([scan scanInt:&res]) - { - return res; - } - } - return 0; -} - --(void)cancel { - [task terminate]; - [super cancel]; -} - --(BOOL)taskForKey:(NSString *)key bundleName:(NSString *)resourceName arguments:(NSArray *)args -{ - NSString *executable = [self executablePathForKey:key bundleName:resourceName]; - - if (!executable) - { - NSLog(@"Could not launch %@",resourceName); - [file setStatus:@"err" order:8 text:[NSString stringWithFormat:NSLocalizedString(@"%@ failed to start",@"tooltip"),key]]; - return NO; - } - - [self taskWithPath:executable arguments:args]; - return YES; -} - --(NSString *)executablePathForKey:(NSString *)prefsName bundleName:(NSString *)resourceName -{ - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - NSString *path = nil; - - if ((path = [[NSBundle mainBundle] pathForAuxiliaryExecutable:resourceName]) - && [[NSFileManager defaultManager] isExecutableFileAtPath:path]) { - return path; - } - - NSLog(@"Can't find working executable for %@ - disabling",prefsName); - NSBeep(); - [defs setBool:NO forKey:[prefsName stringByAppendingString:@"@Enabled"]]; - - return nil; -} - --(NSString *)tempPath -{ - static int uid=0; if (uid==0) uid = getpid()<<12; - return [NSTemporaryDirectory() stringByAppendingPathComponent: [NSString stringWithFormat:@"ImageOptim.%@.%x.%x.temp",[self className],(unsigned int)([file hash]^[self hash]),uid++]]; -} - --(NSObject*)delegate -{ - return file; -} -@synthesize file; -@end diff --git a/imageoptim/Workers/DirWorker.h b/imageoptim/Workers/DirWorker.h deleted file mode 100644 index a210c4ce..00000000 --- a/imageoptim/Workers/DirWorker.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// DirWorker.h -// -// Created by porneL on 30.wrz.07. -// - -#import -#import "Worker.h" -@class FilesQueue; - -@interface DirWorker : NSOperation { - FilesQueue *filesQueue; - NSString *path; - NSArray *extensions; -} - --(id)initWithPath:(NSString *)path filesQueue:(FilesQueue *)q extensions:(NSArray*)e; - -@property (copy) NSString *path; -@end diff --git a/imageoptim/Workers/DirWorker.m b/imageoptim/Workers/DirWorker.m deleted file mode 100644 index 7f91e4b2..00000000 --- a/imageoptim/Workers/DirWorker.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// DirWorker.m -// -// Created by porneL on 30.wrz.07. -// - -#import "DirWorker.h" -#import "../FilesQueue.h" - -@implementation DirWorker - - -@synthesize path; - --(id)initWithPath:(NSString *)aPath filesQueue:(FilesQueue *)q extensions:(NSArray*)theExtensions -{ - if (self = [super init]) - { - self.path = aPath; - filesQueue = q; - extensions = theExtensions; - } - return self; -} - --(void)main -{ - const NSUInteger buffer_capacity = 256; - NSUInteger buffer_size = 1; - NSUInteger buffered = 0; - NSMutableArray *buffer = [NSMutableArray arrayWithCapacity:buffer_capacity]; - - @try - { - for(NSString *filePath in [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:path error:nil]) - { - NSString *newPath = [path stringByAppendingPathComponent:filePath]; - - if ([extensions containsObject:[newPath pathExtension]]) - { - [buffer addObject:newPath]; buffered++; - if (buffered >= buffer_size) - { - // assuming that previous buffer flushes created some work to do - // buffer size can be increased to lower overhead - buffer_size = MIN(buffer_capacity, buffer_size*2 + 4); - [filesQueue addFilePaths:buffer]; - [buffer removeAllObjects]; buffered=0; - } - } - } - - if ([buffer count]) [filesQueue addFilePaths:buffer]; - } - @catch (NSException *ex) { - NSLog(@"DIR worker failed %@",ex); - } -} - --(NSString *)description { - return [NSString stringWithFormat:@"Dir %@ (%@)",path,[super description]]; -} - -@end diff --git a/imageoptim/Workers/GifsicleWorker.m b/imageoptim/Workers/GifsicleWorker.m deleted file mode 100644 index b893f220..00000000 --- a/imageoptim/Workers/GifsicleWorker.m +++ /dev/null @@ -1,45 +0,0 @@ - -#import "GifsicleWorker.h" -#import "../File.h" - -@implementation GifsicleWorker - -@synthesize interlace; - --(void)run -{ - NSString *temp = [self tempPath]; - // - NSMutableArray *args = [NSMutableArray arrayWithObjects:@"-o",temp, - interlace ? @"--interlace" : @"--no-interlace", - @"-O3", - @"--careful",/* needed for Safari/Preview decoding bug */ - @"--no-comments",@"--no-names",@"--same-delay",@"--same-loopcount",@"--no-warnings", - @"--",[file filePath],nil]; - - if (![self taskForKey:@"Gifsicle" bundleName:@"gifsicle" arguments:args]) { - return; - } - - NSFileHandle *devnull = [NSFileHandle fileHandleWithNullDevice]; - - [task setStandardInput: devnull]; - [task setStandardError: devnull]; - [task setStandardOutput: devnull]; - - [self launchTask]; - [task waitUntilExit]; - - [devnull closeFile]; - - if ([self isCancelled]) return; - - NSUInteger fileSizeOptimized = [File fileByteSize:temp]; - NSInteger termstatus = [task terminationStatus]; - if (!termstatus && fileSizeOptimized) - { - [file setFilePathOptimized:temp size:fileSizeOptimized toolName:interlace ? @"Gifsicle interlaced" : @"Gifsicle"]; - } -} - -@end diff --git a/imageoptim/Workers/JpegoptimWorker.m b/imageoptim/Workers/JpegoptimWorker.m deleted file mode 100644 index a970f6bc..00000000 --- a/imageoptim/Workers/JpegoptimWorker.m +++ /dev/null @@ -1,104 +0,0 @@ -// -// JpegoptimWorker.m -// -// Created by porneL on 7.paĆș.07. -// - -#import "JpegoptimWorker.h" -#import "../File.h" - -@implementation JpegoptimWorker - --(id)initWithFile:(File *)aFile { - if (self = [super initWithFile:aFile]) - { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - - // Sharing setting with jpegtran - strip = [defaults boolForKey:@"JpegTranStripAll"]; - - maxquality = [defaults integerForKey:@"JpegOptimMaxQuality"]; - } - return self; -} - --(BOOL)makesNonOptimizingModifications { - return maxquality < 100; -} - --(void)run -{ - NSFileManager *fm = [NSFileManager defaultManager]; - NSString *temp = [self tempPath]; - NSError *error = nil; - - if (![fm copyItemAtPath:[file filePath] toPath:temp error:&error]) - { - NSLog(@"Can't make temp copy of %@ in %@",[file filePath],temp); - } - - NSMutableArray *args = [NSMutableArray arrayWithObjects: @"-q",@"--",temp,nil]; - - - if (strip) { - // Photographers prefer EXIF/ICC kept. - if ([file isCameraPhoto]) { - [args insertObject:@"--strip-com" atIndex:0]; - } else { - [args insertObject:@"--strip-all" atIndex:0]; - } - } - - if (maxquality > 10 && maxquality < 100) - { - [args insertObject:[NSString stringWithFormat:@"-m%d",(int)maxquality] atIndex:0]; - } - - if (![self taskForKey:@"JpegOptim" bundleName:@"jpegoptim" arguments:args]) { - return; - } - - NSPipe *commandPipe = [NSPipe pipe]; - NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; - - [task setStandardOutput: commandPipe]; - [task setStandardError: commandPipe]; - - [self launchTask]; - - [self parseLinesFromHandle:commandHandle]; - - [commandHandle readInBackgroundAndNotify]; - [task waitUntilExit]; - - [commandHandle closeFile]; - - if ([self isCancelled]) return; - - if (![task terminationStatus] && fileSizeOptimized) - { - [file setFilePathOptimized:temp size:fileSizeOptimized toolName:[self className]]; - } - -} - --(BOOL)parseLine:(NSString *)line -{ - NSInteger size; - if ((size = [self readNumberAfter:@" [OK] " inLine:line])) - { - //NSLog(@"File size %d",size); - [file setByteSize:size]; - } - if ((size = [self readNumberAfter:@" --> " inLine:line])) - { - //NSLog(@"File size optimized %d",size); - //[file setByteSizeOptimized:size]; - fileSizeOptimized = size; - return YES; - } - return NO; -} - - -@end diff --git a/imageoptim/Workers/JpegtranWorker.m b/imageoptim/Workers/JpegtranWorker.m deleted file mode 100644 index 0d4639dc..00000000 --- a/imageoptim/Workers/JpegtranWorker.m +++ /dev/null @@ -1,91 +0,0 @@ -// -// JpegtranWorker.m -// -// Created by porneL on 7.paĆș.07. -// - -#import "JpegtranWorker.h" -#import "../File.h" - -@implementation JpegtranWorker - --(id)initWithFile:(File *)aFile { - if (self = [super initWithFile:aFile]) - { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - // Photographers prefer EXIF/ICC kept. - strip = [defaults boolForKey:@"JpegTranStripAll"] && ![file isCameraPhoto]; - - jpegrescan = [defaults boolForKey:@"JpegRescanEnabled"]; - } - return self; -} - --(void)run -{ - NSString *temp = [self tempPath]; - - // eh, handling of paths starting with "-" is unsafe here. Hopefully all paths from dropped files will be absolute... - NSMutableArray *args = [NSMutableArray arrayWithObjects:[file filePath],nil]; - NSString *executableName; - - if (jpegrescan) { - executableName = @"jpegrescan"; - if (strip) { - [args insertObject:@"-s" atIndex:0]; - } - [args addObject:temp]; - } else { - executableName = @"jpegtran"; - [args insertObject:@"-outfile" atIndex:0]; - [args insertObject:temp atIndex:1]; - - [args insertObject:@"-optimize" atIndex:0]; - [args insertObject:@"-copy" atIndex:0]; - [args insertObject:strip ? @"none" : @"all" atIndex:1]; - } - - // For jpegrescan to work both JpegTran and JpegRescan need to be enabled - if (![self taskForKey:@"JpegTran" bundleName:executableName arguments:args]) { - return; - } - - [task setCurrentDirectoryPath:[[[NSBundle mainBundle] pathForAuxiliaryExecutable:@"jpegtran"] stringByDeletingLastPathComponent]]; - - NSPipe *commandPipe = [NSPipe pipe]; - NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; - - [task setStandardOutput: commandPipe]; - [task setStandardError: commandPipe]; - - [self launchTask]; - - [commandHandle readToEndOfFileInBackgroundAndNotify]; - [task waitUntilExit]; - - [commandHandle closeFile]; - - if ([self isCancelled]) return; - - if (![task terminationStatus]) - { - NSUInteger fileSizeOptimized; - if ((fileSizeOptimized = [File fileByteSize:temp])) - { - [file setFilePathOptimized:temp size:fileSizeOptimized toolName:executableName]; - } - } -} - --(BOOL)parseLine:(NSString *)line -{ - NSRange substr = [line rangeOfString:@"End Of Image"]; - if (substr.length) - { - return YES; - } - return NO; -} - - -@end diff --git a/imageoptim/Workers/OptiPngWorker.h b/imageoptim/Workers/OptiPngWorker.h deleted file mode 100644 index fc44f2e8..00000000 --- a/imageoptim/Workers/OptiPngWorker.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AdvCompWorker.h -// -// Created by porneL on 30.wrz.07. -// - -#import -#import "CommandWorker.h" - -@interface OptiPngWorker : CommandWorker { - NSInteger optlevel, interlace; - - - NSInteger idatSize; - NSUInteger fileSize; - NSUInteger fileSizeOptimized; -} -@end diff --git a/imageoptim/Workers/OptiPngWorker.m b/imageoptim/Workers/OptiPngWorker.m deleted file mode 100644 index 0f914134..00000000 --- a/imageoptim/Workers/OptiPngWorker.m +++ /dev/null @@ -1,101 +0,0 @@ -// -// AdvCompWorker.m -// -// Created by porneL on 30.wrz.07. -// - -#import "OptiPngWorker.h" -#import "../File.h" - -@implementation OptiPngWorker - --(id)init { - if (self = [super init]) - { - NSUserDefaults *defs = [NSUserDefaults standardUserDefaults]; - optlevel = [defs integerForKey:@"OptiPngLevel"]; - interlace = [defs integerForKey:@"OptiPngInterlace"]; - - } - return self; -} - --(void)run -{ - NSString *temp = [self tempPath]; - - NSMutableArray *args = [NSMutableArray arrayWithObjects: [NSString stringWithFormat:@"-o%d",(int)(optlevel ? optlevel : 6)], - @"-out",temp,@"--",[file filePath],nil]; - - if (interlace != -1) - { - [args insertObject:[NSString stringWithFormat:@"-i%d",(int)interlace] atIndex:0]; - } - - if (![self taskForKey:@"OptiPng" bundleName:@"optipng" arguments:args]) { - return; - } - - NSPipe *commandPipe = [NSPipe pipe]; - NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; - - [task setStandardError: commandPipe]; - [task setStandardOutput: commandPipe]; - - [self launchTask]; - - [self parseLinesFromHandle:commandHandle]; - - [commandHandle readInBackgroundAndNotify]; - - [task waitUntilExit]; - [commandHandle closeFile]; - - if ([self isCancelled]) return; - - if (![task terminationStatus] && fileSizeOptimized) - { - [file setFilePathOptimized:temp size:fileSizeOptimized toolName:[self className]]; - } - //else NSLog(@"Optipng failed to optimize anything"); -} - --(BOOL)parseLine:(NSString *)line -{ - //NSLog(@"### %@",line); - - NSUInteger res; - - if ([line length] > 20) - { - // idat sizes are totally broken in latest optipng - /*if (res = [self readNumberAfter:@"Input IDAT size = " inLine:line]) - { - idatSize = res; - NSLog(@"OptiPng input idat %d",res); - } - else if (res = [self readNumberAfter:@"IDAT size = " inLine:line]) - { - //[file setByteSizeOptimized: fileSize - idatSize + res]; - NSLog(@"Idat %d guesstimate %d",res,fileSize - idatSize + res); - } - else*/ - if ((res = [self readNumberAfter:@"Input file size = " inLine:line])) - { - fileSize = res; - [file setByteSize:fileSize]; - //NSLog(@"OptiPng input file %d",res); - } - else if ((res = [self readNumberAfter:@"Output file size = " inLine:line])) - { - fileSizeOptimized = res; - //[file setByteSizeOptimized:fileSizeOptimized]; - //NSLog(@"OptiPng output %d",res); - - return YES; - } - } - return NO; -} - -@end diff --git a/imageoptim/Workers/PngCrushWorker.h b/imageoptim/Workers/PngCrushWorker.h deleted file mode 100644 index ab28f8d7..00000000 --- a/imageoptim/Workers/PngCrushWorker.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// PngCrushWorker.h -// -// Created by porneL on 1.paĆș.07. -// - -#import -#import "CommandWorker.h" - -@interface PngCrushWorker : CommandWorker { - int firstIdatSize; - BOOL strip; -} - --(BOOL)makesNonOptimizingModifications; - -@end diff --git a/imageoptim/Workers/PngCrushWorker.m b/imageoptim/Workers/PngCrushWorker.m deleted file mode 100644 index 5fc8ec86..00000000 --- a/imageoptim/Workers/PngCrushWorker.m +++ /dev/null @@ -1,91 +0,0 @@ -// -// PngCrushWorker.m -// -// Created by porneL on 1.paĆș.07. -// - -#import "PngCrushWorker.h" - - -@implementation PngCrushWorker -- (id)init { - if ((self = [super init])) { - strip = [[NSUserDefaults standardUserDefaults] boolForKey:@"PngOutRemoveChunks"]; - } - return self; -} - --(void)run -{ - NSString *temp = [self tempPath]; - - NSMutableArray *args = [NSMutableArray arrayWithObjects:@"-reduce",@"-cc",@"--",[file filePath],temp,nil]; - - // Reusing PngOut config here - if (strip) { - [args insertObject:@"-rem" atIndex:0]; - [args insertObject:@"alla" atIndex:1]; - } - - if ([file isSmall]) { - [args insertObject:@"-brute" atIndex:0]; - } - - if (![self taskForKey:@"PngCrush" bundleName:@"pngcrush" arguments:args]) { - return; - } - - NSPipe *commandPipe = [NSPipe pipe]; - NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; - - [task setStandardOutput: commandPipe]; - [task setStandardError: commandPipe]; - - [self launchTask]; - - [commandHandle readToEndOfFileInBackgroundAndNotify]; - - [task waitUntilExit]; - - [commandHandle closeFile]; - - if ([self isCancelled]) return; - - if (![task terminationStatus]) - { - NSUInteger fileSizeOptimized; - // pngcrush sometimes writes only PNG header (70 bytes)! - if ((fileSizeOptimized = [File fileByteSize:temp]) && fileSizeOptimized > 70) - { - [file setFilePathOptimized:temp size:fileSizeOptimized toolName:[self className]]; - } - } - else NSLog(@"pngcrush failed"); -} - -//-(BOOL)parseLine:(NSString *)line -//{ -// int res; -// //NSLog(@"PNGCrush: %@",line); -// if ((res = [self readNumberAfter:@") = " inLine:line]) || (res = [self readNumberAfter:@"IDAT chunks = " inLine:line])) -// { -// // eh -// } -// else -// { -// NSRange substr = [line rangeOfString:@"Best pngcrush method"]; -// if (substr.length) -// { -// return YES; -// } -// } -// return NO; -//} - - --(BOOL)makesNonOptimizingModifications -{ - return strip; -} - -@end diff --git a/imageoptim/Workers/PngoutWorker.h b/imageoptim/Workers/PngoutWorker.h deleted file mode 100644 index 4d7aec2e..00000000 --- a/imageoptim/Workers/PngoutWorker.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// PngoutWorker.h -// -// Created by porneL on 29.wrz.07. -// - -#import -#import "CommandWorker.h" - -@interface PngoutWorker : CommandWorker { - BOOL removechunks, interruptIfTakesTooLong; - NSInteger level; - - NSInteger fileSizeOptimized; -} - - --(BOOL)makesNonOptimizingModifications; - -@end diff --git a/imageoptim/Workers/PngoutWorker.m b/imageoptim/Workers/PngoutWorker.m deleted file mode 100644 index d268b8cf..00000000 --- a/imageoptim/Workers/PngoutWorker.m +++ /dev/null @@ -1,127 +0,0 @@ -// -// PngoutWorker.m -// ImageOptim -// -// Created by porneL on 29.wrz.07. -// Copyright 2007 __MyCompanyName__. All rights reserved. -// - -#import "PngoutWorker.h" -#import "../File.h" - -@implementation PngoutWorker - --(id)init { - if (self = [super init]) - { - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - level = 3-[defaults integerForKey:@"PngOutLevel"]; - removechunks = [defaults boolForKey:@"PngOutRemoveChunks"]; - interruptIfTakesTooLong = [defaults boolForKey:@"PngOutInterruptIfTakesTooLong"]; - } - return self; -} - --(void)run -{ - NSString *temp = [self tempPath]; - - // uses stdout for file to force progress output to unbufferred stderr - NSMutableArray *args = [NSMutableArray arrayWithObjects: @"-v",/*@"--",*/[file filePath],@"-",nil]; - - [args insertObject:@"-r" atIndex:0]; - - int actualLevel = (int)level; - if ([file isLarge] && level < 2) { - actualLevel++; // use faster setting for large files - } - - if (actualLevel) { // s0 is default - [args insertObject:[NSString stringWithFormat:@"-s%d",actualLevel] atIndex:0]; - } - - if (!removechunks) { // -k0 (remove) is default - [args insertObject:@"-k1" atIndex:0]; - } - - if (![self taskForKey:@"PngOut" bundleName:@"pngout" arguments:args]) { - return; - } - - if (![[NSFileManager defaultManager] createFileAtPath:temp contents:[NSData data] attributes:nil]) - { - NSLog(@"Cant create %@",temp); - } - - NSFileHandle *fileOutputHandle = [NSFileHandle fileHandleForWritingAtPath:temp]; - - NSPipe *commandPipe = [NSPipe pipe]; - NSFileHandle *commandHandle = [commandPipe fileHandleForReading]; - - [task setStandardOutput: fileOutputHandle]; - [task setStandardError: commandPipe]; - - if (interruptIfTakesTooLong) [task performSelector:@selector(interrupt) withObject:nil afterDelay:60.0];// TODO: configurable timeout? - [self launchTask]; - - [self parseLinesFromHandle:commandHandle]; - - if (interruptIfTakesTooLong) [NSObject cancelPreviousPerformRequestsWithTarget:task selector:@selector(interrupt) object:nil]; - - [commandHandle readInBackgroundAndNotify]; - - [task waitUntilExit]; - [commandHandle closeFile]; - [fileOutputHandle closeFile]; - - if ([self isCancelled]) return; - - if (![task terminationStatus] && fileSizeOptimized) - { - [file setFilePathOptimized:temp size:fileSizeOptimized toolName:@"PNGOUT"]; - } -} - --(BOOL)makesNonOptimizingModifications -{ - return removechunks; -} - --(BOOL)parseLine:(NSString *)line -{ - // run PNGOUT killing timer - [[NSRunLoop currentRunLoop] limitDateForMode:NSDefaultRunLoopMode]; - - NSScanner *scan = [NSScanner scannerWithString:line]; - - if ([line length] > 4 && [[line substringToIndex:4] isEqual:@" In:"]) - { -// NSLog(@"Foudn in %@",line); - [scan setScanLocation:4]; - int byteSize=0; - if ([scan scanInt:&byteSize] && byteSize) [file setByteSize:byteSize]; - } - else if ([line length] > 4 && [[line substringToIndex:4] isEqual:@"Out:"]) - { -// NSLog(@"Foudn out %@",line); - [scan setScanLocation:4]; - int byteSize=0; - if ([scan scanInt:&byteSize] && byteSize) - { - fileSizeOptimized = byteSize; - //[file setByteSizeOptimized:byteSize]; - } - } - else if ([line length] >= 3 && [line characterAtIndex:2] == '%') - { -// NSLog(@"%@",line); - } - else if ([line length] >= 4 && [[line substringToIndex:4] isEqual:@"Took"]) - { -// NSLog(@"Tookline %@",line); - return YES; - } - return NO; -} - -@end diff --git a/imageoptim/Workers/Worker.h b/imageoptim/Workers/Worker.h deleted file mode 100644 index 62a40b4a..00000000 --- a/imageoptim/Workers/Worker.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// Worker.h -// -// Created by porneL on 30.wrz.07. -// - -#import - - -@class Worker; -@class File; - -@protocol WorkerQueueDelegate --(void)workerHasFinished:(Worker *)w; --(void)workerHasStarted:(Worker *)w; -@end - - -@interface Worker : NSOperation { - -} - --(BOOL)isRelatedTo:(File *)f; - --(BOOL)makesNonOptimizingModifications; - --(NSObject *)delegate; - --(void)run; -@end diff --git a/imageoptim/Workers/Worker.m b/imageoptim/Workers/Worker.m deleted file mode 100644 index 9b289bb1..00000000 --- a/imageoptim/Workers/Worker.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// Worker.m -// -// Created by porneL on 30.wrz.07. -// - -#import "Worker.h" - -@implementation Worker - --(NSObject *)delegate -{ - return nil; -} - --(BOOL)isRelatedTo:(File *)unused -{ - return NO; -} - --(void)main { - assert([self delegate]); - [[self delegate] workerHasStarted:self]; - @try { - [self run]; - } - @catch (NSException *exception) { - NSLog(@"Caught %@: %@ %@", [exception name], [exception reason], self); - } - @finally { - assert([self delegate]); - [[self delegate] workerHasFinished:self]; - } -} - --(void)run -{ -// NSLog(@"Run and did nothing %@",[self className]); -} - --(BOOL)makesNonOptimizingModifications -{ - return NO; -} - --(NSString *)description -{ - return [NSString stringWithFormat:@"%@ %X ready %d, running %d, deleg %@", - [self className],(unsigned int)[self hash],[self isReady],[self isExecuting],[self delegate]]; -} - -@end diff --git a/imageoptim/appcast.xml b/imageoptim/appcast.xml old mode 100755 new mode 100644 index b16d34e1..9845256a --- a/imageoptim/appcast.xml +++ b/imageoptim/appcast.xml @@ -2,34 +2,25 @@ Codestin Search App -http://imageoptim.com/appcast.xml +https://imageoptim.com/appcast.xml ImageOptim updates en - -Codestin Search App - -
  • Added configurable columns (right-click table headers)
  • -
  • Slowest settings are not used for very large files to avoid optimisation taking “forever”
  • -
  • Less aggressive optimization of GIF files to avoid bugs in Safari
  • -
  • British localisation
  • -
  • EXIF and color profiles are not stripped from large JPEG files (i.e. usually photos form digital cameras)
  • - -

    Previously:

    - -]]>
    -Fri, 01 Feb 2013 22:09:54 +0000 - -10.8.2 - - - - - + Codestin Search App + +
  • Added new, Rust-based parallelized OxiPNG optimizer. Removed the old, unmaintained OptiPNG
  • +
  • Fixed crashes on macOS Mojave
  • + + ]]>
    + Sun, 25 Nov 2018 22:06:43 +0000 + 10.14.0 + + + + + +
    diff --git a/imageoptim/ar.lproj/Credits.html b/imageoptim/ar.lproj/Credits.html new file mode 100644 index 00000000..b13af363 --- /dev/null +++ b/imageoptim/ar.lproj/Credits.html @@ -0,0 +1,31 @@ +

    ImageOptim by Kornel LesiƄski and contributors is a GUI for 3rd party utilities:

    + +
    +

    +ImageOptim can be redistributed and modified under GNU General Public License version 2 or later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC. +

    +

    Translated by Rdeef

    diff --git a/imageoptim/ar.lproj/Help/index.html b/imageoptim/ar.lproj/Help/index.html new file mode 100644 index 00000000..49a5157f --- /dev/null +++ b/imageoptim/ar.lproj/Help/index.html @@ -0,0 +1,60 @@ + + + + +Codestin Search App + + + + + + + +

    ImageOptim

    +

    ÙƒÙŠÙÙŠŰ© Ű§Ù„Ű„ŰłŰȘŰźŰŻŰ§Ù…

    +
      +
    1. ۏ۱ و Ű„ŰłÙ‚Ű§Ű· Ù…Ù„ÙŰ§ŰȘ Ű§Ù„Ű”ÙˆŰ± PNG ŰŁÙˆ JPEG ŰŁÙˆ Ù…ŰŹÙ„ŰŻŰ§ŰȘ ŰȘŰ­ŰȘوي Űčلى Ű”ÙˆŰ± ŰŻŰ§ŰźÙ„ Ù†Ű§ÙŰ°Ű© ImageOptim.
    2. +
    3. Ű„Ù†ŰȘ۞۱ Ű­ŰȘى ŰȘنŰȘهي.
    4. +
    5. ۱ۭۚ! (من Ù…Ù„ÙŰ§ŰȘ ŰŁŰ”Űș۱)
    6. +
    +

    Ű§Ù„Ù…Ù„ÙŰ§ŰȘ ŰłÙŠŰȘم ۄ۳ŰȘŰšŰŻŰ§Ù„Ù‡Ű§ ŰšŰ§Ù„Ù†ŰłŰźŰ© Ű§Ù„ŰŁŰ”Űș۱. Ű§Ù„Ù†ŰłŰź Ű§Ù„ŰŁŰ”Ù„ÙŠŰ© من Ű§Ù„Ű”ÙˆŰ± ŰłÙŠŰȘم Ù†Ù‚Ù„Ù‡Ű§ Ù„ŰłÙ„Ű© Ű§Ù„Ù…Ű­Ű°ÙˆÙŰ§ŰȘ.

    +

    يمكنك ŰŁÙŠŰ¶Ű§Ù‹ ۏ۱ و Ű„ŰłÙ‚Ű§Ű· Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Űčلى ŰŁÙŠÙ‚ÙˆÙ†Ű© ImageOptim في Ű§Ù„ŰŽŰ±ÙŠŰ· Ű§Ù„ŰłÙÙ„ÙŠ.

    +

    ŰȘŰčلم كيف ŰȘŰșÙŠŰ± Ű§Ù„ŰźŰ”Ű§ŰŠŰ”.

    +

    Ű§Ù„ŰŁÙŠÙ‚ÙˆÙ†Ű§ŰȘ في ŰŹŰŻÙˆÙ„ Ű§Ù„Űč۱۶

    + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkŰȘم ŰȘŰ­ŰłÙŠÙ† Ű§Ù„Ű”ÙˆŰ± ŰšÙ†ŰŹŰ§Ű­.
    Green Xكل ŰŽÙŠŰĄ ŰȘم Űčلى Ù…Ű§ÙŠŰ±Ű§Ù… لكن Ű§Ù„Ű”ÙˆŰ±Ű© Ù„Ű§ÙŠÙ…ÙƒÙ† ŰȘŰ­ŰłÙŠÙ†Ù‡Ű§ ŰŁÙƒŰ«Ű± من Ù‡Ű°Ű§.
    Gray starŰȘŰ­ŰłÙŠÙ† Ű§Ù„Ù…Ù„Ù Ù‡Ű°Ű§ يŰȘم Ű­Ű§Ù„ÙŠŰ§Ù‹.
    Gray dotsŰ§Ù„Ù…Ù„Ù ŰȘم ÙˆŰ¶Űčه في Ű·Ű§ŰšÙˆŰ± Ű§Ù„Ű„Ù†ŰȘ۞ۧ۱ للŰȘŰ­ŰłÙŠÙ† ŰšŰčŰŻ Ù…Ű§ÙŠŰȘم Ű§Ù„Ű„Ù†ŰȘÙ‡Ű§ŰĄ ŰȘŰ­ŰłÙŠÙ† Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Ű§Ù„ŰŁŰźŰ±Ù‰.
    Orange exclamation markÙ„Ù‚ŰŻ ÙˆŰ§ŰŹÙ‡Ù†Ű§ ۟۷ۣ ŰŁŰ«Ù†Ű§ŰĄ Ű§Ù„ŰȘŰ­ŰłÙŠÙ†. ŰłŰȘŰŹŰŻ Ű§Ù„ŰłŰšŰš ŰšŰȘŰŽŰșيل Console.app.
    +

    كيف ŰȘŰčمل

    +

    ImageOptim هو Űčۚۧ۱۩ Űčن ÙˆŰ§ŰŹÙ‡Ű© Ù„Ù‡Ű°Ù‡ Ű§Ù„ŰšŰ±Ű§Ù…ŰŹ ÙˆÙ…Ű­Ű±ÙƒŰ§ŰȘ Ű§Ù„ŰȘŰ­ŰłÙŠÙ†:

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • و PNGOUT.
    • +
    +

    يقوم ImageOptim ŰšŰȘŰŽŰșيلهم و ۄ۟ŰȘÙŠŰ§Ű± Ű§Ù„Ù…Ù„Ù Ű§Ù„ŰŁŰ”Űș۱ ŰšŰŽÙƒÙ„ ŰȘÙ„Ù‚Ű§ŰŠÙŠ.

    + + diff --git a/imageoptim/ar.lproj/Help/prefs.html b/imageoptim/ar.lproj/Help/prefs.html new file mode 100644 index 00000000..4599bd80 --- /dev/null +++ b/imageoptim/ar.lproj/Help/prefs.html @@ -0,0 +1,78 @@ + + + + +Codestin Search App + + + + + + + +

    ۟۔ۧۊ۔ImageOptim

    +

    « Ű±ŰŹÙˆŰč Ù„Ù„ŰšŰŻŰ§ÙŠŰ©

    +

    ۟۔ۧۊ۔ ŰčŰ§Ù…Ű©

    +
    +
    ۄۭŰȘÙŰž ŰšŰ§Ù„Ű”Ù„Ű§Ű­ÙŠŰ§ŰȘ و Ű§Ù„ŰźÙˆŰ§Ű” و Ű§Ù„Ű„ŰźŰȘ۔ۧ۱ۧŰȘ
    +
    +

    ŰšŰŻÙ„Ű§Ù‹ من Ű­Ű°Ù Ű§Ù„Ù…Ű§Ù Ű§Ù„Ù‚ŰŻÙŠÙ… و Ű„Ù†ŰŽŰ§ŰĄ ملف ŰŹŰŻÙŠŰŻ ŰšÙ†ÙŰł Ű§Ù„Ű§ŰłÙ…ŰŒ ÙÙ‚Ű· قم ۚۄ۳ŰȘŰšŰŻŰ§Ù„ Ù…Ű­ŰȘوى Ű§Ù„Ù…Ù„Ù Ű§Ù„Ù‚ŰŻÙŠÙ… ŰšÙ†ÙŰł Ű§Ù„Ù…ÙƒŰ§Ù†. Ù‡Ű°Ù‡ Ű§Ù„ŰčÙ…Ù„ÙŠŰ© ŰȘŰ¶Ù…Ù† ŰšÙ‚Ű§ŰĄ Ù†ÙŰł Ű§Ù„ŰźÙˆŰ§Ű” و Ű§Ù„Ű”Ù„Ű§Ű­ÙŠŰ§ŰȘ و Ű§Ù„Ű„ŰźŰȘ۔ۧ۱ۧŰȘ.

    +

    ŰčŰŻÙ… Ű§Ù„Ű§Ű­ŰȘÙŰ§Űž ŰšŰ§Ù„Ű”Ù„Ű§Ű­ÙŠŰ§ŰȘ ۣ۳۱Űč ŰšŰŽÙƒÙ„ Ű·ÙÙŠÙ.

    +
    +
    Ű„ŰČŰ§Ù„Ű© Ű§Ù„ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„ÙˆŰ”ÙÙŠŰ© من Ű”ÙˆŰ± PNG (Ù…Ù„ÙŰ§ŰȘ ŰȘŰčŰ±ÙŠÙ Ű§Ù„ŰŁÙ„ÙˆŰ§Ù†ŰŒ ŰŹŰ§Ù…Ű§ŰŒ ÙˆŰŁÙ…ÙˆŰ± ۧ۟ŰȘÙŠŰ§Ű±ÙŠŰ© ŰŁŰźŰ±Ù‰)
    +
    +

    Ù…Ù„ÙŰ§ŰȘ Ű§Ù„Ű”ÙˆŰ± PNG Ù‚ŰŻ ŰȘملك ŰłŰ·ÙˆŰč وŰȘŰŽŰšÙ’Űč لوني ÙŠŰźŰȘلف من مŰȘŰ”ÙŰ­ Ù„ŰąŰźŰ±. Ù„ŰŁÙ† Ù…Ù„ÙŰ§ŰȘ Ű§Ù„ŰȘŰčŰ±ÙŠÙ Ű§Ù„ŰźŰ§Ű”Ű© ŰšŰ§Ù„ŰŁÙ„ÙˆŰ§Ù† و ŰȘŰ”Ű­ÙŠŰ­ Ű§Ù„ŰŹŰ§Ù…Ű§ و ŰźÙ„Ű§ÙŰ© Ù„Ű§ يŰȘم مŰčŰ§Ù„ŰŹŰȘÙ‡Ű§ ŰšŰŽÙƒÙ„ مŰȘŰŽŰ§ŰšÙ‡ في كل مŰȘŰ”ÙŰ­. Ű­Ű°Ù Ù‡Ű°Ù‡ Ű§Ù„ŰšÙŠŰ§Ù†Ű§ŰȘ ÙŠŰŹŰčل ŰŁÙ„ÙˆŰ§Ù† Ű”ÙˆŰ± PNG ŰŁÙƒŰ«Ű± ŰȘŰ·Ű§ŰšÙ‚Ű§Ù‹ ŰšÙŠÙ† ŰŁŰșÙ„Űš Ű§Ù„Ù…ŰȘŰ”ÙŰ­Ű§ŰȘ و يقلل Ű­ŰŹÙ… Ű§Ù„Ű”ÙˆŰ±.

    +

    ŰšÙŠŰ§Ù†Ű§ŰȘ Ù…ŰźÙÙŠŰ© ŰŁŰźŰ±Ù‰ ŰȘŰ­Ű°Ù هي Ű§Ù„ŰŁŰźŰ±Ù‰ Ù…Ű«Ù„ Ű§Ù„ŰȘŰčÙ„ÙŠÙ‚Ű§ŰȘ و مŰčÙ„ÙˆÙ…Ű§ŰȘ Ű§Ù„Ù€ DPI.

    +
    +
    Ű„ŰČŰ§Ù„Ű© Ű§Ù„ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„ÙˆŰ”ÙÙŠŰ© من Ű”ÙˆŰ± JPEG (Ù…Ù„ÙŰ§ŰȘ ŰȘŰčŰ±ÙŠÙ Ű§Ù„ŰŁÙ„ÙˆŰ§Ù†ŰŒ ŰšÙŠŰ§Ù†Ű§ŰȘ EXIF ی ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„Ù…ÙˆÙ‚Űč GPSی ÙˆŰŁÙ…ÙˆŰ± ŰŁŰźŰ±Ù‰)
    +
    +

    Ű­Ű°Ù Ű§Ù„ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„ÙˆŰ”ÙÙŠŰ© من Ű§Ù„Ű”ÙˆŰ±. Ù…Ű«Ù„ Ù…Ù„ÙŰ§ŰȘ ŰȘŰčŰ±ÙŠÙ Ű§Ù„ŰŁÙ„ÙˆŰ§Ù† و وقŰȘ ŰŁÙ„ÙˆŰ§Ù† Ű§Ù„ŰȘŰč۱۶ و Ű„Ű­ŰŻŰ§Ű«ÙŠŰ§ŰȘ Ű§Ù„Ù…ÙƒŰ§Ù† GPS و نوŰč Ű§Ù„ÙƒŰ§Ù…ÙŠŰ±Ű§ و Ű§ŰłÙ… Ű§Ù„ŰšŰ±Ù†Ű§Ù…ŰŹ Ű§Ù„Ù…ŰłŰȘŰźŰŻÙ… Ù„Ű„Ù†ŰŽŰ§ŰĄ Ű§Ù„Ű”ÙˆŰ±Ű©.

    +

    مŰčÙ„ÙˆÙ…Ű§ŰȘ Ű­Ù‚ÙˆÙ‚ Ű§Ù„Ù†ŰłŰź Ű§Ù„Ù…ŰŻÙ…ŰŹŰ© ŰłÙŠŰȘم Ű­Ű°ÙÙ‡Ű§ هي Ű§Ù„ŰŁŰźŰ±Ù‰. Ű±ŰŹŰ§ŰĄŰ§Ù‹ Ù„Ű§Ű­Űž ŰŁÙ† Ű§Ù„Ű”ÙˆŰ± ŰšŰŽÙƒÙ„ ŰčŰ§Ù… Ù…Ű­Ù…ÙŠŰ© ŰšÙ‚Ű§Ù†ÙˆÙ† Ű­Ù‚ÙˆÙ‚ Ű§Ù„Ù†ŰłŰź ŰšŰș۶ Ű§Ù„Ù†ŰžŰ± Űčن ÙˆŰŹÙˆŰŻ ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„Ű­Ù‚ÙˆÙ‚ Ű§Ù„Ù…ŰźÙÙŠŰ© Ù‡Ű°Ù‡ ŰŁÙ… Ù„Ű§.

    +
    +
    +

    ŰŁŰŻÙˆŰ§ŰȘ

    +

    Ù…Ű­Ű±ÙƒŰ§ Zopfli و PNGOUT Ù‡Ù…Ű§ من Ù…Ű­Ű±ÙƒŰ§ŰȘ ۶ŰșŰ· Ű”ÙˆŰ± PNG Ű§Ù„ŰŹÙŠŰŻŰ© ŰŹŰŻŰ§Ù‹ لكن يŰčÙŠŰšÙ‡Ű§ ŰŁÙ†Ù‡Ű§ ŰšŰ·ÙŠŰŠŰ© ŰŹŰŻŰ§Ù‹. قم ŰšŰȘŰčŰ·ÙŠÙ„Ù‡Ù…Ű§ ۄ۰ۧ ۄۭŰȘŰŹŰȘ لŰȘŰ­ŰłÙŠÙ† Ű”ÙˆŰ± PNG ŰšŰŽÙƒÙ„ ŰłŰ±ÙŠŰč (ŰŻŰč Ù…Ű­Ű±Ùƒ AdvPNG ÙÙ‚Ű· ۄ۰ۧ ۣ۱ۯŰȘ ۳۱ŰčŰ© و ۶ŰșŰ· ŰŹÙŠŰŻ).

    +

    Ù…Ű­Ű±ÙƒŰ§ Zopfli و OxiPNG ŰłÙŠÙ‚ÙˆÙ…Ű§ ŰšÙ…ŰłŰ­ قيم RGB Ù„Ù„ŰšÙƒŰłÙ„Ű§ŰȘ Ű§Ù„ŰŽÙŰ§ÙŰ© (ŰȘŰčŰ±Ù ŰšŰ„ŰłÙ… Ű§Ù„ŰŁÙ„ÙŰ§ Ű§Ù„Ù‚Ű°Ű±Ű©). قم ŰšŰȘŰčŰ·ÙŠÙ„ Ù‡Ű°Ù‡ Ű§Ù„Ù…Ű­Ű±ÙƒŰ§ŰȘ ۄ۰ۧ ŰȘكن ŰȘقوم ŰšŰȘŰ­ŰłÙŠÙ† Ű”ÙˆŰ± ŰȘŰłŰȘŰźŰŻÙ… Ù‚Ù†Ű§Ű© ŰŁÙ„ÙŰ§ Ù„ŰŽÙŠŰĄ ۹۟۱ ŰčÙˆŰ¶Ű§Ù‹ Űčن Ű§Ù„ŰŽÙŰ§ÙÙŠŰ© ( Ù…Ű«Ù„ Ù…Ù„ÙŰ§ŰȘ Ű§Ù„ŰźŰ±Ű§ŰŠŰ· في Ù…Ù„ÙŰ§ŰȘ مŰčÙ„ÙˆÙ…Ű§ŰȘ Ű§Ù„ŰŁÙ„Űčۧۚ).

    +
    +

    JPEGOptim

    +
    +
    ŰŹÙˆŰŻŰ© ŰčŰ§Ù„ÙŠŰ©
    +
    +

    لو ŰȘم Ű¶ŰšŰ·Ù‡ Űčلى 100ÙȘ ÙŰ„Ù† Ű§Ù„ŰȘŰ­ŰłÙŠÙ† ŰłÙŠÙƒÙˆÙ† مهŰȘ۱ۊ.

    +

    ŰŁÙŠ ŰŽÙŠŰĄ ŰŁÙ‚Ù„ من 100ÙȘ ŰłÙŠÙ†ŰȘŰŹ ŰŹÙˆŰŻŰ© ŰŁÙ‚Ù„ Ù„Ù„Ű”ÙˆŰ± ۄ۰ۧ ÙƒŰ§Ù†ŰȘ Ù…Ű­ÙÙˆŰžŰ© Ù…ŰłŰšÙ‚Ű§Ù‹ ŰšŰŹÙˆŰŻŰ© ŰčŰ§Ù„ÙŠŰ©.

    +
    +
    +
    +
    +

    Ù…Ű­Ű±Ùƒ PNGOUT

    +
    +
    نوŰč Ű§Ù„ŰȘŰ­ŰłÙŠÙ†
    +
    +

    Ù…Ű­Ű±Ùƒ PNGOUT يŰčŰȘۚ۱ فŰčŰ§Ù„ ŰŹŰŻŰ§Ù‹ لكن ŰŁÙŠŰ¶Ű§Ù‹ ŰšŰ·ÙŠŰĄ ŰŹŰŻŰ§Ù‹. قم ۚۄ۳ŰȘŰźŰŻŰ§Ù… Ù…ŰłŰȘوى ŰŁÙ‚Ù„ Ű„Ù† كنŰȘ قليل Ű§Ù„Ű”ŰšŰ±.

    +
    +
    Ű§Ù„Ù…Ù‚Ű§Ű·ŰčŰ© Ű„Ù† ۣ۟۰ وقŰȘŰ§Ù‹ Ű·ÙˆÙŠÙ„Ű§Ù‹
    +
    +

    Ù…Ű­Ű±Ùƒ PNGOUT Ù‚ŰŻ ÙŠŰ­ŰȘۧۏ Ű§Ù„ÙƒŰ«ÙŠŰ± من Ű§Ù„ÙˆÙ‚ŰȘ لŰȘŰ­ŰłÙŠÙ† Ű§Ù„Ű”ÙˆŰ± Ű§Ù„ÙƒŰšÙŠŰ±Ű© ŰŹŰŻŰ§Ù‹. Ù‡Ű°Ű§ Ű§Ù„ŰźÙŠŰ§Ű± ÙŠÙ‚Ű§Ű·Űč Ű§Ù„ŰčÙ…Ù„ÙŠŰ© ŰšŰŁÙ…Ű§Ù† ŰšŰčŰŻ 1 ŰŻÙ‚ÙŠÙ‚Ű© من Ű§Ù„ÙˆÙ‚ŰȘ.

    +
    +
    +
    +
    +

    Ù…Ű­Ű±Ùƒ OxiPNG

    +
    +
    Ù…ŰłŰȘوى Ű§Ù„ŰȘŰ­ŰłÙŠÙ†
    +
    +

    ŰčŰŻŰŻ من Ù…ŰźŰȘلف Ű§Ù„Ű„ŰčۯۧۯۧŰȘ ŰȘم ŰȘۏ۱ۚŰȘÙ‡Ű§. من Ű§Ù„Ù†Ű§ŰŻŰ± ŰŹŰŻŰ§Ù‹ Ù…Ù†Ű·Ù‚ÙŠŰ§Ù‹ ŰȘۏ۱ۚŰȘهم ŰŹÙ…ÙŠŰčŰ§Ù‹.

    +
    +
    ŰŹŰčل Ű§Ù„Ű”ÙˆŰ± مŰȘŰŽŰ§ŰšÙƒŰ© interlaced (ŰŽŰŻÙŠŰŻ Ű§Ù„ŰȘŰ­ŰłÙŠÙ†)
    +
    +

    Ű§Ù„Ű”ÙˆŰ± Ű§Ù„Ù…ŰȘŰŽŰ§ŰšÙƒŰ© interlaced ŰȘŰšŰŻÙˆ ŰŁÙŰ¶Ù„ ŰčÙ†ŰŻÙ…Ű§ يŰȘم ŰŹÙ„ŰšÙ‡Ű§ ŰšŰŽÙƒÙ„ ŰŹŰČŰŠÙŠ. لكن ŰșŰ§Ù„ŰšŰ§ Ű§Ù„ŰȘŰŽŰ§ŰšÙƒ interlace ÙŠŰŹŰčل ۶ŰșŰ· Ű§Ù„Ű”ÙˆŰ± فŰčŰ§Ù„ÙŠŰ©.

    +

    ŰźŰ§Ù†Ű© Ű§Ù„Ű§ŰźŰȘÙŠŰ§Ű± Ù‡Ű°Ù‡ Ù„Ù‡Ű§ Ű«Ù„Ű§Ű« Ű­Ű§Ù„Ű§ŰȘ: ŰčÙ†ŰŻ ŰȘŰ­ŰŻÙŠŰŻÙ‡Ű§ ÙŰ„Ù† Ű§Ù„Ű”ÙˆŰ± ŰłŰȘكون مŰȘŰŽŰ§ŰšÙƒŰ© interlaced Ű„ŰŹŰšŰ§Ű±ÙŠŰ§Ù‹. ŰčÙ†ŰŻÙ…Ű§ ŰȘكون Ù…Ű­ŰŻŰŻŰ© ŰšŰŽÙƒÙ„ Ù†Ű”ÙŠ ÙŰ„Ù† Ű­Ű§Ù„Ű© Ű§Ù„ŰȘŰŽŰ§ŰšÙƒ interlace في Ű§Ù„Ű”ÙˆŰ±Ű© لن يŰȘم ŰȘŰșÙŠÙŠŰ±Ù‡. ŰŁÙ…Ű§ في Ű­Ű§Ù„Ű© ŰčŰŻÙ… ŰȘŰ­ŰŻÙŠŰŻ Ű§Ù„ŰźŰ§Ù†Ű© ÙŰ„Ù† Ű§Ù„ŰȘŰŽŰ§ŰšÙƒ interlace ŰłÙŠŰȘم Ű„ŰČŰ§Ù„ŰȘه من Ű§Ù„Ű”ÙˆŰ±.

    +
    +
    +
    +
    +

    Ù…Ű­Ű±Ùƒ Gifsicle

    +

    Ù„Ű¶ŰșŰ· ŰŁÙŰ¶Ù„ ÙŠŰŹŰš Ű„Ù† ŰȘقوم ŰšŰȘŰ­ÙˆÙŠÙ„ Ù…Ù„ÙŰ§ŰȘ Ű§Ù„Ű”ÙˆŰ± GIF للنوŰč PNG (Ù…Ű­Ű±Ùƒ ImageOptim Ù„Ű§ÙŠÙ‚ÙˆÙ… ŰšŰ°Ù„Ùƒ ŰȘÙ„Ù‚Ű§ŰŠÙŠŰ§Ù‹).

    +
    + + diff --git a/imageoptim/ar.lproj/ImageOptim.strings b/imageoptim/ar.lproj/ImageOptim.strings new file mode 100644 index 00000000..a79e9923 --- /dev/null +++ b/imageoptim/ar.lproj/ImageOptim.strings @@ -0,0 +1,215 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "ŰŹÙ„Űš Ű§Ù„ÙƒÙ„ Ù„Ù„Ù…Ù‚ŰŻÙ…Ű©"; + +/* Menu Item "Window" */ +"19.title" = "Ù†Ű§ÙŰ°Ű©"; + +/* Menu Item "Minimize" */ +"23.title" = "ŰȘŰ”ŰșÙŠŰ±"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Ù†Ű§ÙŰ°Ű©"; + +/* Top-level Main Menu "Services" */ +"130.title" = "ŰźŰŻÙ…Ű§ŰȘ"; + +/* Menu Item "Services" */ +"131.title" = "ŰźŰŻÙ…Ű§ŰȘ"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ŰȘŰ”ŰșÙŠŰ± ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Ű„ŰșÙ„Ű§Ù‚ ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Ű„ŰźÙŰ§ŰĄ Ű§Ù„ŰŁŰźŰ±Ù‰"; + +/* Menu Item "Show All" */ +"150.title" = "Űč۱۶ Ű§Ù„ÙƒÙ„"; + +/* Menu Item "Zoom" */ +"197.title" = "ŰȘÙƒŰšÙŠŰ±"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Ù‚Ű§ŰŠÙ…Ű© Ű§Ù„Ù…Ù„ÙŰ§ŰȘ للŰȘŰ­ŰłÙŠÙ†"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Ű§Ù„Ù…Ù„Ù"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Ű§Ù„Ű­ŰŹÙ…"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Ű­ŰŹÙ… Ű§Ù„Ù…Ù„Ù ŰšŰčŰŻ Ű§Ù„ŰȘŰ­ŰłÙŠÙ†"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Ű­ŰŹÙ… Ű§Ù„Ù…Ù„Ù ŰšŰčŰŻ Ű§Ù„ŰȘŰ­ŰłÙŠÙ†"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Ű§Ù„Ù…Ű­ÙÙˆŰž"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Ű§Ù„Ű­Ű§Ù„Ű©"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Ű­ÙˆÙ„ ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "۟۔ۧۊ۔..."; + +/* Menu Item "Edit" */ +"375.title" = "ŰȘŰ­Ű±ÙŠŰ±"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "ŰȘŰ­Ű±ÙŠŰ±"; + +/* Menu Item "Select All" */ +"377.title" = "ŰȘŰ­ŰŻÙŠŰŻ Ű§Ù„ÙƒÙ„"; + +/* Menu Item "Undo" */ +"378.title" = "ŰȘ۱ۧۏŰč"; + +/* Menu Item "Redo" */ +"384.title" = "Ű„Ù„Űșۧۥ ŰȘ۱ۧۏŰč"; + +/* Menu Item "Cut" */ +"398.title" = "Ù‚Ű”"; + +/* Menu Item "Copy" */ +"399.title" = "Ù†ŰłŰź"; + +/* Menu Item "Paste" */ +"400.title" = "Ù„Ű”Ù‚"; + +/* Menu Item "Delete" */ +"402.title" = "Ű­Ű°Ù"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Ű„Ű¶Ű§ÙŰ© Ù…Ù„ÙŰ§ŰȘ ŰŹŰŻÙŠŰŻŰ© ŰŁÙˆ Ù…ŰŹÙ„ŰŻŰ§ŰȘ"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "ŰŁŰ¶Ù"; + +/* Menu Item "File" */ +"429.title" = "Ű§Ù„Ù…Ù„Ù"; + +/* Top-level Main Menu "File" */ +"430.title" = "Ű§Ù„Ù…Ù„Ù"; + +/* Menu Item "Add Files
" */ +"437.title" = "Ű„Ű¶Ű§ÙŰ© Ù…Ù„ÙŰ§ŰȘ..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Ű­Ű§Ù„Ű© Ű§Ù„ŰȘŰ­ŰłÙŠÙ†"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Ű­Ű§Ù„Ű© Ű§Ù„ŰȘŰ­ŰłÙŠÙ†"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Ű„ŰșÙ„Ű§Ù‚ Ù†Ű§ÙŰ°Ű©"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Ù…ŰłŰ§ŰčŰŻŰ©"; + +/* Menu Item "Help" */ +"504.title" = "Ù…ŰłŰ§ŰčŰŻŰ©"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Ù…ŰłŰ§ŰčŰŻŰ© ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Ű­ÙˆÙ„ ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "ŰȘŰ­ŰłÙŠÙ† Ù…Ű±Ű© ŰŁŰźŰ±Ù‰"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "ۭۚ۫ Űčن ŰȘŰ­ŰŻÙŠŰ«Ű§ŰȘ..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "ۏ۱ ÙˆŰŁŰłÙ‚Ű· Ù…Ù„ÙŰ§ŰȘ Ű§Ù„Ű”ÙˆŰ± في Ű§Ù„Ù…Ù†Ű·Ù‚Ű© Ű§Ù„ŰčÙ„ÙˆÙŠŰ©"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "ŰȘŰŽŰșيل Ű§Ù„ŰȘŰ­ŰłÙŠÙ† Ù…Ű±Ű© ŰŁŰźŰ±Ù‰"; + +/* Button "Again" */ +"635.title" = "Ù…Ű±Ű© ŰŁŰźŰ±Ù‰"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "Ù†ŰłŰźŰ©"; + +/* TextFieldCell "version" */ +"646.title" = "Ù†ŰłŰźŰ©"; + +/* Menu Item "Tools" */ +"655.title" = "ŰŁŰŻÙˆŰ§ŰȘ"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "ŰŁŰŻÙˆŰ§ŰȘ"; + +/* Menu Item "Quick Look" */ +"708.title" = "Űč۱۶ ŰłŰ±ÙŠŰč"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "ŰŁŰłÙ‚Ű· Ű§Ù„Ű”ÙˆŰ± Ù‡Ù†Ű§"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Ű­Ű°Ù Ű§Ù„Ù…ÙƒŰȘمل"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Ű­ŰłÙ† Ű§Ù„Ù…ÙŒŰ­ŰłÙ†"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "موقŰč ImageOptim"; + +/* Menu Item "View Source" */ +"735.title" = "Űč۱۶ Ű§Ù„Ù…Ű”ŰŻŰ±"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Ű­ŰŹÙ… Ű§Ù„Ù…ÙŰ­ŰłÙ†"; + +/* Menu Item "Savings" */ +"741.title" = "Ű§Ù„Ù…Ű­ÙÙˆŰž"; + +/* Menu Item "Best tool" */ +"747.title" = "ŰŁŰ­ŰłÙ† ۣۯۧ۩"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "ŰŁŰ­ŰłÙ† ۣۯۧ۩"; + +/* Menu Item "Original Size" */ +"791.title" = "Ű§Ù„Ű­ŰŹÙ… Ű§Ù„ŰŁŰ”Ù„ÙŠ"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Ű§Ù„Ű­ŰŹÙ… Ű§Ù„ŰŁŰ”Ù„ÙŠ"; + +/* Menu Item "Show Columns" */ +"809.title" = "Űč۱۶ Ű§Ù„ŰŁŰčÙ…ŰŻŰ©"; + +/* Menu Item "Donate" */ +"820.title" = "ŰȘۚ۱Űč"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Ű„Űčۧۯ۩ Ù„Ù„ŰŁŰ”Ù„ÙŠ"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Ű§Ù„ŰŹÙˆŰŻŰ©: 100ÙȘ"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Ű„ÙŠÙ‚Ű§Ù"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Ù†ŰłŰź ÙƒŰ±Ű§ŰšŰ· ŰšÙŠŰ§Ù†Ű§ŰȘ"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Űč۱۶ ŰšÙ…ŰłŰȘŰč۱۶ Ű§Ù„Ù…Ù„ÙŰ§ŰȘ"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "ŰȘŰ”ŰșÙŠŰ± مهŰȘ۱ۊ"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Űč۱۶ ŰšÙ…ŰłŰȘŰč۱۶ Ű§Ù„Ù…Ù„ÙŰ§ŰȘ"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Ű§Ù„Ű­Ű§Ù„Ű©"; diff --git a/imageoptim/ar.lproj/Localizable.strings b/imageoptim/ar.lproj/Localizable.strings new file mode 100644 index 00000000..d5fe02b8 --- /dev/null +++ b/imageoptim/ar.lproj/Localizable.strings @@ -0,0 +1,60 @@ +/* tooltip */ +"%@ failed to start" = "ÙŰŽÙ„ %@ ŰšŰ§Ù„ŰšŰŻŰĄ"; + +/* undo command name */ +"Add" = "ŰŁŰ¶Ù"; + +/* undo command name */ +"Cut" = "Ù‚Ű”"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "كل Ű§Ù„ŰŁŰŻÙˆŰ§ŰȘ Ű§Ù„ŰŁŰłŰ§ŰłÙŠŰ© ŰȘم ŰȘŰčŰ·ÙŠÙ„Ù‡Ű§ من ۟۔ۧۊ۔"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Ù„Ű§ÙŠÙ…ÙƒÙ† فŰȘŰ­ Ű§Ù„Ù…Ù„Ù"; + +/* tooltip */ +"File cannot be optimized any further" = "Ű§Ù„Ù…Ù„Ù Ù„Ű§ÙŠÙ…ÙƒÙ† ŰȘŰ­ŰłÙŠÙ†Ù‡Ű§ ŰŁÙƒŰ«Ű± Ű§Ù„Ű­Ű§Ù„ÙŠ"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Ű§Ù„Ù…Ù„Ù Ù„ÙŠŰł PNG ŰŁÙˆ GIF ŰŁÙˆ JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ŰłÙŠÙ‚ÙˆÙ… ImageOptim ۚۄŰșÙ„Ű§Ù‚ Ù†ÙŰłÙ‡ ŰšŰčŰŻ Ű„Ù†ŰȘÙ‡Ű§ŰĄ Ű§Ù„ŰȘŰ­ŰłÙŠÙ†Ű§ŰȘ"; + +/* tooltip */ +"Inspecting file" = "ÙŰ­Ű” ملف"; + +/* kilobytes suffix */ +"KB" = "ÙƒÙŠÙ„ÙˆŰšŰ§ÙŠŰȘ"; + +/* newly added to the queue */ +"New file" = "ملف ŰŹŰŻÙŠŰŻ"; + +/* status bar */ +"Lossy minification enabled" = "Ű§Ù„ŰȘŰ”ŰșÙŠŰ± Ű§Ù„Ù…Ù‡ŰȘ۱ۊ مفŰčل"; + +/* megabytes suffix */ +"MB" = "ميŰșۧ ŰšŰ§ÙŠŰȘ"; + +/* tooltip */ +"Optimized file could not be saved" = "Ű§Ù„Ù…Ù„Ù Ű§Ù„Ù…ÙŰ­ŰłÙ† لم Ù†ŰłŰȘŰ·Űč Ű­ÙŰžÙ‡"; + +/* tooltip */ +"Optimized successfully with %@" = "ŰȘم Ű§Ù„ŰȘŰ­ŰłÙŠÙ† ŰšÙ†ŰŹŰ§Ű­ مŰč %@"; + +/* tooltip */ +"Reverted to original" = "ۧ۳ŰȘ۱ۏۧŰč Ű§Ù„ŰŁŰ”Ù„ÙŠ"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "ŰȘم Ű­ÙŰž %1$@ من ŰŁŰ”Ù„ %2$@. Ű„ŰŹÙ…Ű§Ù„Ű§Ù‹ %3$@. (Ù…Ű§ÙŠŰ”Ù„ %4$@ لكل ملف)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "ŰȘم Ű­ÙŰž %1$@ من ŰŁŰ”Ù„ %2$@. ŰšŰ§Ù„Ù…ŰȘÙˆŰłŰ· %3$@ لكل ملف (Ù…Ű§ÙŠŰ”Ù„ Ű„Ù„Ù‰ %4$@)"; + +/* command name, tooltip */ +"Started %@" = "ۚۯۣ %@"; + +/* tooltip */ +"Waiting to be optimized" = "ŰšŰ§Ù„Ű„Ù†ŰȘ۞ۧ۱ لكي يŰȘم ŰȘŰ­ŰłÙŠÙ†Ù‡Ű§"; + diff --git a/imageoptim/ar.lproj/PrefsController.strings b/imageoptim/ar.lproj/PrefsController.strings new file mode 100644 index 00000000..20f8fe1d --- /dev/null +++ b/imageoptim/ar.lproj/PrefsController.strings @@ -0,0 +1,69 @@ + +/* Window title */ +"5.title" = "۟۔ۧۊ۔ ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "ŰčŰ§Ù…"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Ű­Ű§Ù„Ű© Ű§Ù„ŰȘŰ­ŰłÙŠÙ†"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Ű§Ù„ŰŹÙˆŰŻŰ©"; + +/* Title in box "Writing files to disk" */ +"280.title" = "كŰȘۧۚ۩ Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Ù„Ù„Ù‚Ű±Ű”"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "ۄۭŰȘÙŰž ŰšŰ§Ù„Ű”Ù„Ű§Ű­ÙŠŰ§ŰȘ و Ű§Ù„ŰźÙˆŰ§Ű” و Ű§Ù„Ű„ŰźŰȘ۔ۧ۱ۧŰȘ"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Ù…ŰłŰȘوى Ű§Ù„ŰȘŰ­ŰłÙŠÙ†"; + +/* "Fast" */ +"819.title" = "ŰłŰ±ÙŠŰč"; + +/* "Insane" */ +"820.title" = "Ù…ŰŹÙ†ÙˆÙ†"; + +/* "Normal" */ +"821.title" = "ŰčŰ§Ù…"; + +/* "Extra" */ +"822.title" = "Ű„Ű¶Ű§ÙÙŠ"; + +/* Checkbox in Preferences */ +"854.title" = "Ű„ŰČŰ§Ù„Ű© Ű§Ù„ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„ÙˆŰ”ÙÙŠŰ© من Ű”ÙˆŰ± PNG (Ù…Ù„ÙŰ§ŰȘ ŰȘŰčŰ±ÙŠÙ Ű§Ù„Ű§Ù„ÙˆŰ§Ù†ŰŒ ŰŹŰ§Ù…Ű§ŰŒ ÙˆŰŁÙ…ÙˆŰ± ۄ۟ŰȘÙŠŰ§Ű±ÙŠŰ© ŰŁŰźŰ±Ù‰) "; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "مŰȘŰ”ÙŰ­Ű§ŰȘ Ű§Ù„ŰŁÙ†ŰȘŰ±Ù†ŰȘ ŰȘŰȘŰ·Ù„Űš ŰŁÙ† ŰȘكون مŰčÙ„ÙˆÙ…Ű§ŰȘ ŰŹŰ§Ù…Ű§ gamma chunks Ù…Ű­Ű°ÙˆÙŰ©."; + +/* label "JPEG quality" */ +"868.title" = "ŰŹÙˆŰŻŰ© JPEG"; + +/* Checkbox in Preferences */ +"911.title" = "Ű„ŰČŰ§Ù„Ű© Ű§Ù„ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„ÙˆŰ”ÙÙŠŰ© من Ű”ÙˆŰ± JPEG (Ù…Ù„ÙŰ§ŰȘ ŰȘŰčŰ±ÙŠÙ Ű§Ù„ŰŁÙ„ÙˆŰ§Ù†ŰŒ ŰšÙŠŰ§Ù†Ű§ŰȘ EXIF ی ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„Ù…ÙˆÙ‚Űč GPSی ÙˆŰŁÙ…ÙˆŰ± ŰŁŰźŰ±Ù‰)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Ű§Ù„ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„ÙˆŰ”ÙÙŠŰ© و Ù…Ù„ÙŰ§ŰȘ Ű§Ù„ŰŁÙ„ÙˆŰ§Ù†"; + +/* Header above list of tools to enable */ +"1107.title" = "ŰȘفŰčيل"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Ű§Ù„Ű­ÙŰž Űčلى Ű§Ù„ŰŽŰšÙƒŰ© ۣ۳۱Űč ŰčÙ†ŰŻÙ…Ű§ ŰȘكون Ű§Ù„Ű”Ù„Ű§Ű­ÙŠŰ§ŰȘ ŰșÙŠŰ± Ù…Ű­ŰȘÙŰž ŰšÙ‡Ű§."; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Ù„Ű§ÙŠÙ†Ű”Ű­ ŰšÙ‡ Ű„Ù† كنŰȘ ŰȘŰčŰȘÙ…ŰŻ Űčلى مŰčÙ„ÙˆÙ…Ű§ŰȘ Ű­Ù‚ÙˆÙ‚ Ű§Ù„Ù†ŰłŰź Ű§Ù„Ù…ŰŻÙ…ŰŹŰ©."; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "ŰŹÙˆŰŻŰ© GIF"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "ÙŠŰŹŰčل Ű§Ù„Ű”ÙˆŰ± ŰŁÙ‚Ù„ Ű­ŰŹÙ…Ű§Ù‹ لكن يقوم ŰšŰȘŰșÙŠÙŠŰ± كيف ŰȘŰšŰŻÙˆ Ű§Ù„Ű”ÙˆŰ±"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "ŰŹÙˆŰŻŰ© PNG"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "ŰȘفŰčيل Ű§Ù„ŰȘŰ”ŰșÙŠŰ± Ű§Ù„Ù…Ù‡ŰȘ۱ۊ"; diff --git a/imageoptim/cs.lproj/Credits.html b/imageoptim/cs.lproj/Credits.html new file mode 100644 index 00000000..eda4b64c --- /dev/null +++ b/imageoptim/cs.lproj/Credits.html @@ -0,0 +1,29 @@ +
    +

    ImageOptim od Kornela LesiƄskiho a pƙispěvatelƯ je rozhraním pro programy tƙetích stran:

    + +

    ImageOptim lze ơíƙit a upravovat za GNU General Public License verze 2 nebo pozdějĆĄĂ­. PƙibalenĂœ PNGOUT nenĂ­ GPL kryt a je zahrnut na zĂĄkladě povolenĂ­ Ardfry Imaging, LLC.

    +

    Pavel Fric

    +
    diff --git a/imageoptim/cs.lproj/Help/index.html b/imageoptim/cs.lproj/Help/index.html new file mode 100644 index 00000000..2dcef6be --- /dev/null +++ b/imageoptim/cs.lproj/Help/index.html @@ -0,0 +1,59 @@ + + + + +Codestin Search App + + + + + + +

    ImageOptim

    +

    Jak pouĆŸĂ­vat

    +
      +
    1. JednoduĆĄe tĂĄhněte a upusĆ„te soubory PNG nebo JPEG nebo adresáƙe na hlavnĂ­ okno.
    2. +
    3. Počkejte, aĆŸ to bude hotovo.
    4. +
    5. Radujte se (z menĆĄĂ­ch souborĆŻ).
    6. +
    +

    Soubory budou pƙepsĂĄny s menĆĄĂ­ verzĂ­. NevylepĆĄenĂ© verze budou pƙesunuty do koĆĄe.

    +

    Soubory a adresáƙe lze takĂ© pƙímo pƙetĂĄhnout na ikonu v panelu.

    +

    Naučte se, jak se dá změnit nastavení programu.

    +

    Ikony v okně činností

    + + + + + + + + + + + + + + + + + + + + + +
    ZelenĂ© zaĆĄkrtnutĂ­ObrĂĄzek byl Ășspěơně vylepĆĄen.
    Green XVĆĄechno je v poƙádku. ObrĂĄzek se ale uĆŸ dĂĄl nepodaƙilo vylepĆĄit.
    Ơedá hvězdaSoubor s obrázkem je právě vylepơován.
    Ć edĂ© tečkySoubor je zaƙazen a čekĂĄ na to, aĆŸ budou hotovy jinĂ© soubory, aby mohl bĂœt vylepĆĄen.
    OranĆŸovĂœ vykƙičnĂ­kBěhem vylepĆĄovĂĄnĂ­ se vyskytla chyba. VysvětlenĂ­ naleznete, kdyĆŸ spustĂ­te Console.app.
    +

    Jak to pracuje

    +

    ImageOptim je rozhranĂ­ (GUI) pro tyto programy:

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • a PNGOUT.
    • +
    +

    ImageOptim je spouĆĄtĂ­. VybĂ­rĂĄ z vĂœĆĄe jmenovanĂœch programĆŻ automaticky ten, kterĂœ dokĂĄĆŸe vytvoƙit nejmenĆĄĂ­ velikost souboru.

    + + diff --git a/imageoptim/cs.lproj/Help/prefs.html b/imageoptim/cs.lproj/Help/prefs.html new file mode 100644 index 00000000..d3438e7e --- /dev/null +++ b/imageoptim/cs.lproj/Help/prefs.html @@ -0,0 +1,76 @@ + + + + +Codestin Search App + + + + + +

    NastavenĂ­ ImageOptim

    +

    « Zpět na rejstƙík

    +

    ObecnĂĄ nastavenĂ­

    +
    +
    Zachovat pråva k souborƯm, vlastnosti a tvrdé odkazy
    +
    +

    NamĂ­sto odstraƈovĂĄnĂ­ starĂœch souborĆŻ zĂĄpis novĂ©ho se stejnĂœm nĂĄzvem, jen nahradĂ­ starĂœ obsah souboru. TĂ­m je zajiĆĄtěno, ĆŸe vĆĄechny trvdĂ© okazy, aliasy, vlastnictvĂ­ souborĆŻ, oprĂĄvněnĂ­ a rozơíƙenĂ© atributy souboru zĆŻstanou stejnĂ©.

    +

    Je lehce rychlejơí nezachovávat oprávnění.

    +
    +
    Zbavit PNG popisnĂœch dat (gama, barevnĂ© profily, nepovinnĂ© kusy)
    +
    +

    PNG soubory mohou mĂ­t odliĆĄnĂœ jas a sytost barev v rĆŻznĂœch prohlĂ­ĆŸečích, protoĆŸe některĂ© prohlĂ­ĆŸeče nepodporujĂ­ funkce gama korekci a barevnĂ© profily stejně. OdstraněnĂ­m těchto informacĂ­ z PNG je barva vĂ­ce konzistentnĂ­ napƙíč prohlĂ­ĆŸeči a sniĆŸuje se velikost souboru.

    +

    DalĆĄĂ­ neviditelnĂ© informace jsou odebrĂĄny takĂ©, napƙíklad DPI a komentáƙe.

    +
    +
    Zbavit JPEG popisnĂœch dat (EXIF, barevnĂ© profily, GPS, otočenĂ­ atd.)
    +
    +

    OdstranĂ­ popisnĂ© data obrazu, napƙíklad profil barev, expozičnĂ­ čas, GPS souƙadnice, model fotoaparĂĄtu a nĂĄzev softwaru pouĆŸitĂ©ho k vytvoƙenĂ­ souboru.

    +

    VloĆŸenĂ© informace o autorskĂœch prĂĄvech jsou odebrĂĄny takĂ©. Vezměte prosĂ­m na vědomĂ­, ĆŸe obecně jsou obrĂĄzky chrĂĄněny autorskĂœm zĂĄkonem bez ohledu na to zda obsahujĂ­ takovĂ© neviditelnĂ© metadata, či nikoliv.

    +
    +
    +

    NĂĄstroje

    +

    Zopfli a PNGOUT jsou velmi dobrĂ© PNG kompresory, ale jsou velmi pomalĂ©. ZakaĆŸte je, pokud potƙebujete rychle optimalizovat soubory PNG (ponechat pouze AdvPNG pro nejrychlejĆĄĂ­, ale stĂĄle dobrou kompresi).

    +

    Zopfli a OxiPNG vyčistĂ­ RGB hodnoty prĆŻhlednĂœch pixelĆŻ (znĂĄmĂ© jako "ĆĄpinavĂ© alfa"). Tyto dva nĂĄstroje zakĂĄĆŸete, pokud optimalizujete speciĂĄlnĂ­ soubory, kterĂ© pouĆŸĂ­vajĂ­ alfa kanĂĄl pro něco jinĂ©ho neĆŸ prĆŻhlednost (napƙ. vĂœĆĄkovĂĄ mapa v datovĂœch souborech hry).

    +
    +

    JPEGOptim

    +
    +
    MaximĂĄlnĂ­ kvalita
    +
    +

    Pokud nastaveno na 100%, vylepƥovåní bude bezztråtové.

    +

    Cokoli pod 100% povede k niĆŸĆĄĂ­ kvalitě souborĆŻ, pokud je to tak, ĆŸe byly uloĆŸeny s nastavenĂ­m vyĆĄĆĄĂ­ kvality.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Typ vyladění
    +
    +

    PNGOUT je velice ĂșčinnĂœ, ale takĂ© velmi pomalĂœ. Pokud nevlĂĄdnete trpělivostĂ­, pouĆŸijte niĆŸĆĄĂ­ kvalitu.

    +
    +
    Pƙeruơit, pokud to trvá pƙíliơ dlouho
    +
    +

    PNGOUT mĆŻĆŸe potƙebovat hodně času na optimalizaci velmi velkĂœch obrĂĄzkĆŻ. Tato moĆŸnost ƙádně pƙeruĆĄĂ­ PNGOUT po 1 minutě.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Úroveƈ vylepơování
    +
    +

    Počet vyzkouĆĄenĂœch kombinacĂ­ odliĆĄnĂœch nastavenĂ­. Zƙídkakdy dĂĄvĂĄ smysl je vyzkouĆĄet vĆĄechny.

    +
    +
    Udělat obrĂĄzky proklĂĄdanĂ© (progresivnĂ­)
    +
    +

    ProklĂĄdanĂ© obrĂĄzky vypadajĂ­ lĂ©pe, kdyĆŸ jsou načteny částečně, ale obvykle proklĂĄdĂĄnĂ­ vede k mĂ©ně efektivnĂ­ kompresi.

    +

    Toto zaĆĄkrtĂĄvacĂ­ políčko mĂĄ tƙi stavy: je-li zaĆĄkrtnuto, budou obrĂĄzky proklĂĄdanĂ©. Je-li smĂ­chĂĄnĂ©, bude proklĂĄdĂĄnĂ­ souboru nezměněno a je-li odĆĄkrtnuto bude proklĂĄdĂĄnĂ­ ze souborĆŻ odstraněno.

    +
    +
    +
    +
    +

    Gifsicle

    +

    Pro nejlepĆĄĂ­ kompresi, měli byste pƙevĂ©st soubory GIF na PNG (ImageOptim to nedělĂĄ automaticky).

    +
    + + diff --git a/imageoptim/cs.lproj/ImageOptim.strings b/imageoptim/cs.lproj/ImageOptim.strings new file mode 100644 index 00000000..f03cda24 --- /dev/null +++ b/imageoptim/cs.lproj/ImageOptim.strings @@ -0,0 +1,218 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "PƙinĂ©st vĆĄe do popƙedĂ­"; + +/* Menu Item "Window" */ +"19.title" = "Okno"; + +/* Menu Item "Minimize" */ +"23.title" = "ZmenĆĄit"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Okno"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "HlavnĂ­ nabĂ­dka"; + +/* Top-level Main Menu "Services" */ +"130.title" = "SluĆŸby"; + +/* Menu Item "Services" */ +"131.title" = "SluĆŸby"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "SkrĂœt ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Ukončit ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "SkrĂœt jinĂ©"; + +/* Menu Item "Show All" */ +"150.title" = "UkĂĄzat vĆĄe"; + +/* Menu Item "Zoom" */ +"197.title" = "ZvětĆĄenĂ­"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Seznam souborĆŻ čekajĂ­cĂ­ch na vylepĆĄenĂ­"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Soubor"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Velikost"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Velikost souboru po vylepĆĄenĂ­"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Velikost souboru po vylepĆĄenĂ­"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Úspora"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Stav"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "O programu ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "NastavenĂ­..."; + +/* Menu Item "Edit" */ +"375.title" = "Upravit"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Upravit"; + +/* Menu Item "Select All" */ +"377.title" = "Vybrat vĆĄe"; + +/* Menu Item "Undo" */ +"378.title" = "Zpět"; + +/* Menu Item "Redo" */ +"384.title" = "Znovu"; + +/* Menu Item "Cut" */ +"398.title" = "Vyjmout"; + +/* Menu Item "Copy" */ +"399.title" = "KopĂ­rovat"; + +/* Menu Item "Paste" */ +"400.title" = "VloĆŸit"; + +/* Menu Item "Delete" */ +"402.title" = "Smazat"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Pƙidat novĂ© soubory nebo adresáƙe"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Pƙidat"; + +/* Menu Item "File" */ +"429.title" = "Soubor"; + +/* Top-level Main Menu "File" */ +"430.title" = "Soubor"; + +/* Menu Item "Add Files
" */ +"437.title" = "Pƙidat soubory..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Stav vylepĆĄovĂĄnĂ­"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Stav vylepĆĄovĂĄnĂ­"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Zavƙít"; + +/* Menu Item "Help" */ +"504.title" = "NĂĄpověda"; + +/* Top-level Main Menu "Help" */ +"505.title" = "NĂĄpověda"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "NĂĄpověda k ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "O programu ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "VylepĆĄit znovu"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Ověƙit aktualizace..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "TĂĄhnout a upustit obrĂĄzkovĂ© soubory na oblast vĂœĆĄe"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Spustit vylepĆĄovĂĄnĂ­ znovu"; + +/* Button "Again" */ +"635.title" = "Znovu"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Stav"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "verze"; + +/* TextFieldCell "version" */ +"646.title" = "verze"; + +/* Menu Item "Tools" */ +"655.title" = "NĂĄstroje"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "NĂĄstroje"; + +/* Menu Item "Quick Look" */ +"708.title" = "RychlĂœ pohled"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Upustit obrĂĄzky zde"; + +/* Menu Item "Delete Completed" */ +"721.title" = "SmazĂĄnĂ­ dokončeno"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "VylepĆĄit vylepĆĄenĂ©"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "StrĂĄnky ImageOptim"; + +/* Menu Item "View Source" */ +"735.title" = "Zobrazit zdroj"; + +/* Menu Item "Optimized Size" */ +"740.title" = "VylepĆĄenĂĄ velikost"; + +/* Menu Item "Savings" */ +"741.title" = "Úspora"; + +/* Menu Item "Best tool" */ +"747.title" = "NejlepĆĄĂ­ nĂĄstroj"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "NejlepĆĄĂ­ nĂĄstroj"; + +/* Menu Item "Original Size" */ +"791.title" = "PĆŻvodnĂ­ velikost"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "PĆŻvodnĂ­ velikost"; + +/* Menu Item "Show Columns" */ +"809.title" = "UkĂĄzat sloupce"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "VrĂĄtit na originĂĄl"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Jakost: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Zastavit"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "KopĂ­rovat Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "UkĂĄzat ve Finderu"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "ZtrĂĄtovĂ© zmenĆĄenĂ­"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "UkĂĄzat ve Finderu"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Stav"; diff --git a/imageoptim/cs.lproj/Localizable.strings b/imageoptim/cs.lproj/Localizable.strings new file mode 100644 index 00000000..fc8bb2f9 --- /dev/null +++ b/imageoptim/cs.lproj/Localizable.strings @@ -0,0 +1,54 @@ +/* tooltip */ +"%@ failed to start" = "%@ se nepodaƙilo spustit"; + +/* undo command name */ +"Add" = "Pƙidat"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "VĆĄechny nezbytnĂ© nĂĄstroje byly v NastavenĂ­ zakĂĄzĂĄny"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Soubor se nepodaƙilo nahrĂĄt do paměti"; + +/* undo command name */ +"Cut" = "Vyjmout"; + +/* tooltip */ +"File cannot be optimized any further" = "Soubor se uĆŸ dĂĄl nedĂĄ vylepĆĄit"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Soubor nenĂ­ PNG, GIF ani JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim bude po dokončenĂ­ optimalizacĂ­ ukončen"; + +/* tooltip */ +"Inspecting file" = "Soubor se zkoumĂĄ"; + +/* newly added to the queue */ +"New file" = "NovĂœ soubor"; + +/* status bar */ +"Lossy minification enabled" = "Povoleno ztrĂĄtovĂ© zmenĆĄenĂ­"; + +/* tooltip */ +"Optimized file could not be saved" = "VylepĆĄenĂœ soubor se nepodaƙilo uloĆŸit"; + +/* tooltip */ +"Optimized successfully with %@" = "VylepĆĄeno Ășspěơně s %@"; + +/* tooltip */ +"Reverted to original" = "VrĂĄceno na originĂĄl"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "UĆĄetƙeno %1$@ z %2$@. %3$@ celkem (aĆŸ do %4$@ na soubor)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "UĆĄetƙeno %1$@ z %2$@. %3$@ prĆŻměrně na soubor (aĆŸ do %4$@)"; + +/* command name, tooltip */ +"Started %@" = "Byl spuĆĄtěn %@"; + +/* tooltip */ +"Waiting to be optimized" = "ČekĂĄ na vylepĆĄenĂ­"; + diff --git a/imageoptim/cs.lproj/PrefsController.strings b/imageoptim/cs.lproj/PrefsController.strings new file mode 100644 index 00000000..77fc3d11 --- /dev/null +++ b/imageoptim/cs.lproj/PrefsController.strings @@ -0,0 +1,65 @@ +/* Window title */ +"5.title" = "NastavenĂ­ ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "ObecnĂ©"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Rychlost vylepĆĄovĂĄnĂ­"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Jakost"; + +/* Title in box "Writing files to disk" */ +"280.title" = "ZĂĄpis souborĆŻ na disk"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Zachovat prĂĄva k souborĆŻm, vlastnosti a tvrdĂ© odkazy"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Úroveƈ vylepĆĄovĂĄnĂ­"; + +/* "Fast" */ +"819.title" = "RychlĂ©"; + +/* "Insane" */ +"820.title" = "Ć Ă­lenĂ©"; + +/* "Normal" */ +"821.title" = "NormĂĄlnĂ­"; + +/* Checkbox in Preferences */ +"854.title" = "Zbavit PNG popisnĂœch dat (gama, barevnĂ© profily, nepovinnĂ© kusy)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "ProhlĂ­ĆŸeče strĂĄnek poĆŸadujĂ­, aby byly kousky gama odstraněny"; + +/* label "JPEG quality" */ +"868.title" = "Jakost JPEG"; + +/* Checkbox in Preferences */ +"911.title" = "Zbavit JPEG popisnĂœch dat (EXIF, barevnĂ© profily, GPS, otočenĂ­ atd.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "PopisnĂĄ data a barevnĂ© profily"; + +/* Header above list of tools to enable */ +"1107.title" = "Povolit"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "UklĂĄdĂĄnĂ­ na sĂ­Ć„ovĂœch discĂ­ch je rychlejĆĄĂ­, kdyĆŸ nejsou zachovĂĄna prĂĄva"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Nedoporučuje se, pokud spolĂ©hĂĄte na vloĆŸenĂ© informace o auorskĂ©m prĂĄvu"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "Jakost GIFu"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "DělĂĄ soubory o hodně menĆĄĂ­mi, ale mĆŻĆŸe vĂ©st ke změně vzhledu obrĂĄzku"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "Jakost PNG"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Povolit ztrĂĄtovĂ© zmenĆĄenĂ­"; diff --git a/imageoptim/da.lproj/Credits.html b/imageoptim/da.lproj/Credits.html new file mode 100644 index 00000000..74e6a6c5 --- /dev/null +++ b/imageoptim/da.lproj/Credits.html @@ -0,0 +1,30 @@ +
    +

    ImageOptim af Kornel LesiƄski og bidragsydere er et GUI for tredjepartsvérktþjer:

    + +

    ImageOptim kan distribueres og modificeres under GNU General Public License version 2 eller nyere. +Det inkluderede PNGOUT er ikke dĂŠkket af GPL, men inkluderet med tilladelse fra Ardfry Imaging, LLC.

    +

    Translated by Rasmus KjĂŠr and Rasmus Ljungmann Pedersen.

    +
    diff --git a/imageoptim/da.lproj/Credits.rtf b/imageoptim/da.lproj/Credits.rtf deleted file mode 100644 index 2356fffb..00000000 --- a/imageoptim/da.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 by Kornel Lesi\uc0\u324 ski and contributors is a GUI for 3rd party utilities:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} by Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} by Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} by Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} by Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} by Eddie Kohler,\ -{\listtext \'95 }and {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} by Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim can be redistributed and modified under {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License version 2 or later}}. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -Translated by Rasmus Kj\'e6r.} \ No newline at end of file diff --git a/imageoptim/da.lproj/Help/Help.helpindex b/imageoptim/da.lproj/Help/Help.helpindex deleted file mode 100644 index ed2b56ad..00000000 Binary files a/imageoptim/da.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/da.lproj/Help/index.html b/imageoptim/da.lproj/Help/index.html index 74deb8c5..acef624a 100644 --- a/imageoptim/da.lproj/Help/index.html +++ b/imageoptim/da.lproj/Help/index.html @@ -1,78 +1,61 @@ - - - - - - - Codestin Search App - - - - - - - - + + + + + +Codestin Search App + - main - -

    ImageOptim

    +

    ImageOptim

    SÄdan bruges det

      -
    1. TrĂŠk-og-slip PNG eller JPEG filer/mapper til tabellen i ImageOptim's vindue.
    2. +
    3. TrĂŠk-og-slip PNG eller JPEG filer/mapper til tabellen i ImageOptim's vindue.
    4. Afvent indtil processen er fĂŠrdig.
    5. Profit! (fra mindre filer)
    - -

    Du kan ogsÄ slippe filer pÄ ImageOptim's ikon i din Dock/proceslinje.

    +

    Du kan ogsÄ slippe filer pÄ ImageOptim's ikon i din Dock.

    LĂŠr hvordan du ĂŠndrer indstillinger.

    Ikoner i filtabel

    - - + + - + - - - + + - - - + + - - - + + + + - - - - + -
    Green Checkmark
    Green CheckmarkBilledet er blevet optimeret korrekt.Billedet er blevet optimeret med succes.
    Green X
    Green X Alt gik efter planen, men billedet kunne ikke optimeres yderligere.
    Gray star
    Gray star Optimering af filen er i gang.
    Gray dots
    Gray dots Filen er i kĂž til at blive optimeret efter de andre filer er fĂŠrdige.
    Orange exclamation mark
    Orange exclamation markDer var en fejl under optimeringen. Du finder evt. forklaring ved at kĂžre OS X's indbyggede Konsol-applikation.Der skete en fejl under optimeringen. Du kan finde forklaring ved at kĂžre Console.app.
    - -

    Hvordan virker det

    + +

    Hvordan virker det

    ImageOptim er en front-end (GUI) for fĂžlgende applikationer:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +63,10 @@

      Hvordan virker det

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • -
    • og valgfrit PNGOUT.
    • +
    • og eventuelt PNGOUT.
    - -

    ImageOptim kÞrer disse automatisk i baggrunden for hver fil, og vÊlger sÄ den mindste fil til dig.

    +

    ImageOptim kĂžrer disse og vĂŠlger automatisk den mindste fil.

    diff --git a/imageoptim/da.lproj/Help/prefs.html b/imageoptim/da.lproj/Help/prefs.html index 993141ce..8ab05098 100644 --- a/imageoptim/da.lproj/Help/prefs.html +++ b/imageoptim/da.lproj/Help/prefs.html @@ -1,104 +1,75 @@ - - -Codestin Search App + + + +Codestin Search App - - - - - -general -

    ImageOptim Preferences

    -

    « Back to index

    -

    You shouldn't need to change any of these.

    -

    General preferences

    -
    -
    Preserve file permissions, attributes and hardlinks
    -
    -

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. -

    It's slightly faster not to preserve permissions. -

    -
    Backup original files before saving
    -

    Will write copy of a file with ~ appended to its name. This makes optimization a bit slower and litters your disk with backup files.

    - -
    Remove optional chunks
    -

    Keep it on if you optimize for web. Disable if you have special PNGs with extra metadata.

    -
    Strip EXIF markers from files
    -

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. Metadata is never removed from JPEG files larger than 1.3MB.

    -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize JPEG files.

    - -
    Maximum quality
    -

    If set to 100%, optimization will be lossless.

    -

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    - -
    -
    -
    -pngout -

    PNGOUT

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using PNGOUT. -

    PNGOUT is not bundled with ImageOptim. It's a great tool, but and author of PNGOUT forbids redistribution of it, so you have to download PNGOUT yourself.

    - -
    -
    Optimization type
    -

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    - -
    Interrupt if takes too long
    -

    PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute.

    -
    -
    -
    -advpng -

    AdvPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using AdvPNG tool.

    + -
    -
    Optimization level
    -
    AdvPNG is relatively fast, so you can use maximum level.
    -
    + +

    ImageOptim indstillinger

    +

    « Tilbage til indeks

    +

    Generelle indstillinger

    +
    +
    Bevar filrettigheder, egenskaber og hardlinks
    +
    +

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same.

    +

    Det er en lille smule hurtigere ikke at bevare filrettigheder.

    +
    +
    Fjern PNG metadata (gamma, farveprofiler, valgfri komponenter)
    +
    +

    PNG filer kan have forskellig lysstyrke og farvemÊtning i forskellige browsere, da ikke alle browsere understÞtter gammakorrektion og farveprofiler ens. Ved at fjerne disse informationer vises PNG-farve mere konsistent pÄ tvÊrs af browsere og filstÞrrelse reduceres.

    +

    Andre usynlige informationer som DPI og kommentarer fjernes ogsÄ.

    +
    +
    Fjern JPEG metadata (EXIF, farveprofiler, GPS, rotation, etc.)
    +
    +

    Fjerner metadata fra billedet, sÄ som farveprofil, eksponeringstid, GPS koordinater, kameramodel og navn pÄ softwaren brugt til at lave filen.

    +

    Integreret copyright information fjernes ogsÄ. BemÊrk venligst at billeder normalt er beskyttet af copyrightlovgivning uanset om de indeholder sÄdanne usynlige metadata eller ej.

    +
    +
    +

    VĂŠrktĂžjer

    +

    Zopfli og PNGOUT er meget gode PNG kompressor, men er meget langsomme. SlÄ dem fra hvis du har brug for at optimere PNG filer hurtigt (brug kun AdvPNG for den hurtigste, men stadig gode komprimering).

    +

    Zopfli og OptiPNG vil fjerne RGB vÊrdier af transparante pixels (kendt som "dirty alpha"). SlÄ disse to vÊrktÞjer fra hvis du optimerer specielle filer, som bruger alpha kanalen til noget andet end at angive gennemsigtighed (f.eks. hÞjdekort i spil datafiler).

    +
    +

    JPEGOptim

    +
    +
    Maksimal kvalitet
    +
    +

    Hvis sat til 100%, sÄ vil optimeringen vÊre tabsfri.

    +

    Alt under 100% vil resultere i lavere kvalitet af filer hvis de lader til at have vĂŠret gemt med en hĂžjere kvalitetsindstilling.

    +
    +
    -
    -optipng -

    OptiPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using OptiPNG tool.

    - -
    -
    Optimization level
    -

    Number of different setting combinations tested. It rarely makes sense to try them all.

    - -
    Make images interlaced (progressive)
    -

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    -

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    -
    +
    +

    PNGOUT

    +
    +
    Optimeringstype
    +
    +

    PNGOUT er meget effektiv, men meget langsom. Brug lavere niveau hvis du er utÄlmodig.

    +
    +
    Afbryd hvis eksekvering trĂŠkker i langdrag
    +
    +

    PNGOUT kan have brug for enormt meget tid pÄ at optimere meget store billeder. Denne indstilling afbryder PNGOUT graciÞst efter 1 minut.

    +
    +
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize GIF files using Gifsicle. - -

    GIF files will be changed to interlaced or non-interlaced automatically, whichever is smaller. In-file comments will be removed.

    -

    Please note that Gifsicle works best with animated GIFs and non-animated GIFs rarely can be optimized

    - -

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    +
    +

    OxiPNG

    +
    +
    Optimeringsniveau
    +
    +

    Antal forskellige indstillingskombinationer afprĂžvet. Det giver sjĂŠldent mening at prĂžve dem alle.

    +
    +
    GĂžr billeder interlaced (progressiv)
    +
    +

    Interlaced billeder ser bedre ud nÄr de er delvist indlÊst, men interlacing gÞr komprimeringen mindre effektiv.

    +

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    +
    +
    +
    +

    Gifsicle

    +

    For den bedste komprimering bĂžr du konventere GIF filer til PNG (ImageOptim gĂžr ikke dette automatisk).

    +
    + + diff --git a/imageoptim/da.lproj/ImageOptim.strings b/imageoptim/da.lproj/ImageOptim.strings new file mode 100644 index 00000000..044a06a5 --- /dev/null +++ b/imageoptim/da.lproj/ImageOptim.strings @@ -0,0 +1,192 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Bring alle frem"; + +/* Menu Item "Window" */ +"19.title" = "Vindue"; + +/* Menu Item "Minimize" */ +"23.title" = "Minimer"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Vindue"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Tjenester"; + +/* Menu Item "Services" */ +"131.title" = "Tjenester"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Skjul ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Luk ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Skjul andre"; + +/* Menu Item "Show All" */ +"150.title" = "Vis alle"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Liste over filer der skal optimeres"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Fil"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "StĂžrrelse"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "StĂžrrelse pĂ„ fil efter optimering"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "StĂžrrelsen af fil efter optimering"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Reducering"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Om ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Indstillinger
"; + +/* Menu Item "Edit" */ +"375.title" = "Rediger"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Rediger"; + +/* Menu Item "Select All" */ +"377.title" = "VĂŠlg alle"; + +/* Menu Item "Undo" */ +"378.title" = "Fortryd"; + +/* Menu Item "Redo" */ +"384.title" = "Gentag"; + +/* Menu Item "Cut" */ +"398.title" = "Klip"; + +/* Menu Item "Copy" */ +"399.title" = "Kopier"; + +/* Menu Item "Paste" */ +"400.title" = "SĂŠt ind"; + +/* Menu Item "Delete" */ +"402.title" = "Slet"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "TilfĂžj nye filer eller foldere"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "TilfĂžj"; + +/* Menu Item "File" */ +"429.title" = "Filer"; + +/* Top-level Main Menu "File" */ +"430.title" = "Filer"; + +/* Menu Item "Add Files
" */ +"437.title" = "TilfĂžj filer
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimeringsstatus"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimeringsstatus"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Luk"; + +/* Menu Item "Help" */ +"504.title" = "HjĂŠlp"; + +/* Top-level Main Menu "Help" */ +"505.title" = "HjĂŠlp"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim hjĂŠlp"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Om ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimer igen"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Tjek for opdateringer
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "TrĂŠk-og-slip billedfiler til tabellen ovenfor"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "KĂžr optimeringer igen"; + +/* Button "Again" */ +"635.title" = "Igen"; + +/* Menu Item "Tools" */ +"655.title" = "VĂŠrktĂžjer"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "VĂŠrktĂžjer"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Slip billeder her"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Slet fĂŠrdigtbehandlede"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimer optimerede"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim hjemmeside"; + +/* Menu Item "View Source" */ +"735.title" = "Vis kildekode"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Optimeret stĂžrrelse"; + +/* Menu Item "Savings" */ +"741.title" = "Reducering"; + +/* Menu Item "Best tool" */ +"747.title" = "Bedste vĂŠrktĂžj"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Bedste vĂŠrktĂžj"; + +/* Menu Item "Original Size" */ +"791.title" = "Original stĂžrrelse"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Original stĂžrrelse"; + +/* Menu Item "Show Columns" */ +"809.title" = "Vis kolonner"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Tilbage til original"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Kvalitet: 100%"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopier Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Vis i Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Destruktiv filformindskelse"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Vis i Finder"; + diff --git a/imageoptim/da.lproj/Localizable.strings b/imageoptim/da.lproj/Localizable.strings index 15db4290..fd31b077 100644 --- a/imageoptim/da.lproj/Localizable.strings +++ b/imageoptim/da.lproj/Localizable.strings @@ -1,14 +1,55 @@ +/* tooltip */ +"%@ failed to start" = "%@ kunne ikke startes"; + +/* undo command name */ +"Add" = "TilfĂžj"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Alle nĂždvendige vĂŠrktĂžjer er blevet deaktiveret i indstillingerne"; -"Can't map file into memory" = "Kan ikke indlĂŠse filen ind i hukommelsen"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Kan ikke indlĂŠse filen til hukommelsen"; + +/* undo command name */ +"Cut" = "Klip"; + +/* tooltip */ "File cannot be optimized any further" = "Filen kan ikke optimeres yderligere"; -"File is neither PNG, GIF nor JPEG" = "Filen er hverken af typen PNG eller JPEG"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Filen er hverken PNG, GIF eller JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim vil lukke, nĂ„r optimeringer er fuldfĂžrt"; + +/* tooltip */ "Inspecting file" = "Inspicerer fil"; + +/* newly added to the queue */ "New file" = "Ny fil"; + +/* status bar */ +"Lossy minification enabled" = "Destruktiv filformindskelse slĂ„et til"; + +/* tooltip */ "Optimized file could not be saved" = "Den optimerede fil kunne ikke gemmes"; -"Optimized successfully with %@" = "Optimeret korrekt med %@"; -"Size of optimized file is 0" = "StĂžrrelsen af filen er 0"; -"Started %@" = "Started med %@"; -"Waiting in queue" = "Afventer i kĂž"; -"Waiting to be optimized" = "Venter pĂ„ at blive optimeret"; -"Waiting to start more optimizations" = "Venter pĂ„ at starte flere optimeringer"; -"%@ failed to start" = "O %@ kunne ikke startes"; \ No newline at end of file + +/* tooltip */ +"Optimized successfully with %@" = "Optimeret med succes med %@"; + +/* tooltip */ +"Reverted to original" = "GĂ„et tilbage til original"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Sparede %1$@ ud af %2$@. %3$@ samlet (op til %4$@ per fil)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Sparede %1$@ ud af %2$@. %3$@ per fil i gennemsnit (op til %4$@)"; + +/* command name, tooltip */ +"Started %@" = "Startet med %@"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Venter pĂ„ at starte flere optimeringer"; + diff --git a/imageoptim/da.lproj/MainMenu.xib b/imageoptim/da.lproj/MainMenu.xib deleted file mode 100644 index a9aa5cbb..00000000 --- a/imageoptim/da.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Optimeringsstatus - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Fil - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - StĂžrrelse (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - StĂžrrelse - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Reducering - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Best tool - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - TrĂŠk-og-slip billedfiler til tabellen ovenfor - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - TilfĂžj - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{434, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{458, 6}, {71, 25}} - - YES - - 67239424 - 134217728 - Igen - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - KĂžr optimeringer igen - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Om ImageOptim - - 2147483647 - - - - - - Tjek for opdateringer
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Indstillinger
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Tjenester - - 1048576 - 2147483647 - - - submenuAction: - - Tjenester - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Skjul ImageOptim - h - 1048576 - 2147483647 - - - - - - Skjul andre - h - 1572864 - 2147483647 - - - - - - Vis alle - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Slut ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Arkiv - - 1048576 - 2147483647 - - - submenuAction: - - Arkiv - - - - TilfĂžj filer
 - o - 1048576 - 2147483647 - - - - - - Optimer igen - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Luk - w - 1048576 - 2147483647 - - - - - - - - - Rediger - - 1048576 - 2147483647 - - - submenuAction: - - Rediger - - - - Fortryd - z - 1048576 - 2147483647 - - - - - - Gentag - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Klip - x - 1048576 - 2147483647 - - - - - - Kopier - c - 1048576 - 2147483647 - - - - - - IndsĂŠt - v - 1048576 - 2147483647 - - - - - - Slet - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - VĂŠlg alle - a - 1048576 - 2147483647 - - - - - - - - - Tools - - 2147483647 - - - submenuAction: - - Tools - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Vindue - - 1048576 - 2147483647 - - - submenuAction: - - Vindue - - - - Minimer - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - StĂžrrelse (original) - - 2147483647 - - - - - - StĂžrrelse - - 2147483647 - 1 - - - - - - Reducering - - 2147483647 - 1 - - - - - - Best tool - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - HjĂŠlp - - 1048576 - 2147483647 - - - submenuAction: - - HjĂŠlp - - - - ImageOptim hjĂŠlp - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Om ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - version - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - StĂžrrelse - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Liste over filer der skal optimeres - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - StĂžrrelsen af fil efter optimering - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Add new files or directories - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/da.lproj/PrefsController.strings b/imageoptim/da.lproj/PrefsController.strings new file mode 100644 index 00000000..539aa48c --- /dev/null +++ b/imageoptim/da.lproj/PrefsController.strings @@ -0,0 +1,65 @@ +/* Window title */ +"5.title" = "ImageOptim indstillinger"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Generelt"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimeringshastighed"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Kvalitet"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Skriver filer til disken"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Bevar filrettigheder, egenskaber og hardlinks"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimeringsniveau"; + +/* "Fast" */ +"819.title" = "Hurtig"; + +/* "Insane" */ +"820.title" = "Sindssyg"; + +/* "Extra" */ +"822.title" = "Ekstra"; + +/* Checkbox in Preferences */ +"854.title" = "Fjern PNG metadata (gamma, farveprofiler, valgfri komponenter)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Internet browsere krĂŠver fjernelse af gamma"; + +/* label "JPEG quality" */ +"868.title" = "JPEG kvalitet"; + +/* Checkbox in Preferences */ +"911.title" = "Fjern JPEG metadata (EXIF, farveprofiler, GPS, rotation, etc.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata og farveprofiler"; + +/* Header above list of tools to enable */ +"1107.title" = "SlĂ„et til"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "At gemme til netvĂŠrksdrev er hurtigere nĂ„r tilladelser ikke bevares"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Ikke anbefalet hvis du afhĂŠnger af integreret copyright information"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF-kvalitet"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "GĂžr filer meget mindre, men kan ĂŠndre, hvordan billeder ser ud"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG kvalitet"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "SlĂ„ destruktiv filformindskelse til"; diff --git a/imageoptim/da.lproj/PrefsController.xib b/imageoptim/da.lproj/PrefsController.xib deleted file mode 100644 index efb5b068..00000000 --- a/imageoptim/da.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim indstillinger - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Bevar filrettigheder, egenskaber og hardlinks - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Lav backup af originalen fĂžr der gemmes - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Skriver filer til disken - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Fjern alle ekstra/valgfri chunks - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Internet browsere krĂŠver fjernelse af gamma - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Fjern EXIF mĂŠrker og kommentarer fra filer - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - SlĂ„et til - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - Generelt - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimeringstype - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Simpel - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Ekstrem - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intens - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - LĂŠngste match - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - PrĂžv forskellige filtre - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Afbryd hvis eksekvering trĂŠkker i langdrag - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - GĂžr billeder interlaced (progressiv) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Optimeringsniveau - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Interlaced files are usually larger - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 forsĂžg - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 forsĂžg - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimeringsniveau - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Hurtig - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Voldsom - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Ekstra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Maximal kvalitet - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/de.lproj/Credits.html b/imageoptim/de.lproj/Credits.html new file mode 100644 index 00000000..fe30a869 --- /dev/null +++ b/imageoptim/de.lproj/Credits.html @@ -0,0 +1,32 @@ +
    +

    ImageOptim von Kornel LesiƄski ist eine GUI fĂŒr folgende 3rd party utilities:

    + +

    ImageOptim darf unter den Bedingungen der +GNU General Public License version 2 oder spÀter weitergegeben und modifiziert werden. +Bundled PNGOUT is not +covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +

    Translation by Alexander Mayer.

    +
    diff --git a/imageoptim/de.lproj/Credits.rtf b/imageoptim/de.lproj/Credits.rtf deleted file mode 100644 index 85a6b605..00000000 --- a/imageoptim/de.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 von Kornel Lesi\uc0\u324 ski ist eine GUI f\'fcr folgende 3rd party utilities:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} von Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} von Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} von Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} von Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} von Eddie Kohler,\ -{\listtext \'95 }and {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} von Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim darf unter den Bedingungen der {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License version 2 oder sp\'e4ter}} weitergegeben und modifiziert werden. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -Translation by Alexander Mayer.} \ No newline at end of file diff --git a/imageoptim/de.lproj/Help/Help.helpindex b/imageoptim/de.lproj/Help/Help.helpindex deleted file mode 100644 index c2537bbe..00000000 Binary files a/imageoptim/de.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/de.lproj/Help/index.html b/imageoptim/de.lproj/Help/index.html index 71e8d88d..d2c444c5 100644 --- a/imageoptim/de.lproj/Help/index.html +++ b/imageoptim/de.lproj/Help/index.html @@ -1,39 +1,76 @@ - - + + + + Codestin Search App - - - - + + + -main -

    ImageOptim

    -

    Wie benutzt man ImageOptim?

    -
    1. Einfach die PNG/JPEG Dateien oder Ordner per Drag'n'Drop in das Hauptfenster ziehen.
    2. Warten.
    3. Sich freuen! ;)
    +

    ImageOptim

    + +

    Wie benutzt man ImageOptim?

    + +
      +
    1. Einfach die PNG/JPEG Dateien oder Ordner per Drag'n'Drop in das Hauptfenster ziehen.
    2. + +
    3. Warten.
    4. + +
    5. Profitiere! (von kleineren Dateien)
    6. +

    Dateien und Ordner können auch direkt auf das ImageOptim Icon im Dock gezogen werden.

    -

    Informationen zu ImageOptims Einstellungen.

    -

    Icons im AktivitÀtsfenster

    - - - - - - - - - - - - - - - + +

    Informationen zu ImageOptims Einstellungen.

    + +

    Icons im AktivitÀtsfenster

    + +
    GrĂŒner HakenDas Bild wurde erfolgreich optimiert.
    GrĂŒnes XAlles OK. Das Bild konnte lediglich nicht weiter optimiert werden.
    Grauer SternDas Bild wird gerade optimiert.
    Grauer PunktDie Datei befindet sich in der Warteschlange.
    Orangenes AusrufezeichenEs gab einen Fehler wÀhrend der Optimierung. Weitere Informationen findet man in der Konsole.app.
    + + + + + + + + + + + + + + + + + + + + + + + + +
    GrĂŒner HakenDas Bild wurde erfolgreich optimiert.
    GrĂŒnes XAlles OK. Das Bild konnte lediglich nicht weiter optimiert werden.
    Grauer SternDas Bild wird gerade optimiert.
    Grauer PunktDie Datei befindet sich in der Warteschlange.
    Orangenes AusrufezeichenEs gab einen Fehler wÀhrend der Optimierung. Weitere Informationen findet man in der Konsole.app.
    -

    Wie funktioniert ImageOptim?

    -

    ImageOptim ist eine grafische OberflĂ€che (GUI) fĂŒr folgende Programme:

    -
    • OptiPNG
    • PNGCrush
    • AdvPNG
    • JpegOptim
    • JpegTran
    • und optional PNGOUT
    + +

    ImageOptim ist eine grafische OberflĂ€che (GUI) fĂŒr folgende Programme:

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • und optional PNGOUT
    • +

    ImageOptim wĂ€hlt aus den oben genannten Programmen das aus, welches die kleinste DateigrĂ¶ĂŸe produzieren kann.

    + + diff --git a/imageoptim/de.lproj/Help/prefs.html b/imageoptim/de.lproj/Help/prefs.html index a704a574..8d704482 100644 --- a/imageoptim/de.lproj/Help/prefs.html +++ b/imageoptim/de.lproj/Help/prefs.html @@ -1,109 +1,77 @@ - - -Codestin Search App + + + + +Codestin Search App - - - - - - -general -

    ImageOptim Einstellungen

    -

    « ZurĂŒck zum Index

    -

    Normalerweise mĂŒssen diese Einstellungen nicht geĂ€ndert werden.

    -

    Allgemeine Einstellungen

    -
    -
    Dateiberechtigungen, -attribute und Hardlinks erhalten
    -
    -

    Anstatt die originale Datei zu löschen und eine neue Datei zu erstellen wird hier der Inhalt der Quelldatei ersetzt. Das hat den Vorteil, dass alle Hardlinks, Aliasse, Dateiberechtigungen und erweiterte Dateiattribute erhalten bleiben. -

    Die Optimierung geht etwas schneller wenn diese Option deaktiviert ist. -

    -
    Quelldatei vor dem Speichern sichern
    -

    Wenn diese Option aktiviert ist wird ein Backup der Originaldatei erstellt, welche mit einer dem Dateinamen angehÀngten Tilde (~) gekennzeichnet wird. Diese Einstellung verlangsamt den Optimierungsprozess und kostet entsprechend Speicherplatz.

    - -
    Entferne alle optionalen Segmente
    -

    Diese Einstellung ist nur ratsam, wenn man Dateien fĂŒr das Internet optimiert.

    -
    Entferne EXIF Markierungen aus den Dateien
    -

    Entfernt Metadaten, wie z.B. Programmnamen oder das Kameramodell aus den Bildern.

    -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Aktiviert
    -

    Wenn dieses Feld angehakt ist versucht ImageOptim die Dateien mit JPEGOptim zu optimieren.

    + + + +

    ImageOptim-Einstellungen

    +

    « ZurĂŒck zum index

    +

    Allgemeine Einstellungen

    +
    +
    Dateiberechtigungen, -attribute und Hardlinks erhalten
    +
    +

    Statt Löschen alter Datei schriftlich eine neue mit dem gleichen Namen, nur ersetzt alte Datei der Inhalt an Ort und Stelle. Dadurch wird sichergestellt, dass alle Hardlinks , Aliasnamen, Datei Besitzer, die Berechtigungen , erweiterte Dateiattribute werden die gleichen bleiben.

    +

    Es ist nicht etwas schneller, um Berechtigungen zu bewahren.

    +
    +
    PNG: Entferne alle optionalen Segmente
    +
    +

    Diese Einstellung ist nur ratsam, wenn man Dateien fĂŒr das Internet optimiert.

    +

    Andere META-Daten werden auch entfernt - etwa Kommentare und DPI-Angaben.

    +
    +
    JPEG-Metadaten entfernen (EXIF, Farbprofile, GPS, Drehung, usw.)<br>
    +
    +

    Entfernt Metadaten, wie z.B. Programmnamen oder das Kameramodell aus den Bildern.

    +

    Eingebettete Copyright bzw. Urheberrechts-Informationen werden auch entfernt. Bitte beachten Sie, daß Bilder grundsĂ€tzlich durch das Urheberrecht geschĂŒtzt sind - auch wenn diese Informationen nicht mehr im Bild gespeichert sind.

    +
    +
    +

    Werkzeuge

    +

    Zopfbi und PNGOUT sind sehr gute, aber langsame PNG Komprimierer. Wenn Sie schnell optimieren mĂŒssen sollten sie diese ausschalten und nur AdvPNG fĂŒr eine schnelle und immer noch gute Komprimierung eingeschaltet lassen.

    +

    Zopfbi und OxiPNG löschen RGB werden aus transparenten Pixeln (bekannt als "dirty alpha"). Schalten Sie diese beiden Tools aus wenn Sie spezielle Dateien optimieren wollen die den Alpha Kanal fĂŒr etwas anderes als Transparenzwerte verwenden (z.B. Höhenkarten in Spiel-Daten-Dateien).

    +
    +

    JPEGOptim

    +
    Maximale QualitÀt
    -

    Wenn diese Einstellung auf 100% gesetzt wird, werden die Bilddateien verlustfrei gespeichert.

    -

    Jede Einstellung unter 100% resultiert in qualitativ schlechteren Ergebnissen.

    - -
    -
    -
    -pngout -

    PNGOUT

    -
    -
    Aktiviert
    -

    Wenn dieses Feld angehakt ist versucht ImageOptim die Dateien mit PNGOUT zu optimieren. -

    PNGOUT ist nicht Bestandteil von ImageOptim. Es ist zwar ein tolles Tool, doch hat der Autor eine Weiterverbreitung durch Dritte untersagt. Man kann es allerdings selbst herunterladen und installieren.

    - - -
    -
    Art der Optimierung
    -

    PNGOUT ist zwar sehr effektiv, allerdings auch sehr langsam. Eine niedrigere Einstellung beschleunigt die Optimierung.

    - -
    Breche die Optimierung ab, falls der Prozess zu lange lÀuft
    -

    PNGOUT kann bei großen Bilddateien unter UmstĂ€nden sehr lange fĂŒr eine Optimierung brauchen. Diese Option beendet PNGOUT nach einer Minute.

    -
    -
    -
    -advpng -

    AdvPNG

    -
    -
    Aktiviert
    -

    Wenn dieses Feld angehakt ist versucht ImageOptim die Dateien mit AdvPNG zu optimieren.

    - - -
    -
    Grad der Optimierung
    -
    AdvPNG arbeitet ziemlich zĂŒgig, weshalb man ohne weiteres die maximale Einstellung wĂ€hlen kann.
    -
    +
    +

    Wenn diese Einstellung auf 100% gesetzt wird, werden die Bilddateien verlustfrei gespeichert.

    +

    Jede Einstellung unter 100% resultiert in qualitativ schlechteren Ergebnissen.

    +
    +
    -
    -optipng -

    OptiPNG

    -
    -
    Aktiviert
    -

    Wenn dieses Feld angehakt ist versucht ImageOptim die Dateien mit OptiPNG zu optimieren.

    - - -
    -
    Grad der Optimierung
    -

    Anzahl der verschiedenen Einstellungskombinationen. Es ist nicht nötig hier alle Kombinationen durchprobieren zu lassen.

    - -
    Erstelle die Bilder interlaced (progressive)
    -

    Diese Bilder sehen etwas besser aus, belegen allerdings auch mehr Speicherplatz.

    -

    Diese Checkbox kennt drei ZustÀnde: Ist sie angehakt wird ein Interlacing erzwungen. Hat sie einen einfachen -, bleibt das dateieigene Interlacing unangetastet, unangehakt wird das Interlacing entfernt.

    -
    +
    +

    PNGOUT

    +
    +
    Optimierungstyp
    +
    +

    PNGOUT ist sehr wirksam, aber sehr langsam. Verwenden Sie die unteren Ebene, wenn Sie ungeduldig sind.

    +
    +
    Breche bei zu langer Optimierung ab
    +
    +

    PNGOUT kann bei großen Bilddateien unter UmstĂ€nden sehr lange fĂŒr eine Optimierung brauchen. Diese Option beendet PNGOUT nach einer Minute.

    +
    +
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Aktiviert
    -

    Wenn dieses Feld angehakt ist versucht ImageOptim die Dateien mit Gifsicle zu optimieren. - - -

    GIF Dateien werden interlaced oder non-interlaced erstellt, abhĂ€ngig davon, welches die geringere DateigrĂ¶ĂŸe produziert. Kommentare werden entfernt.

    -

    Gifsicle funktioniert am besten mit animierten GIFs. Nicht animierte GIFs können kaum noch weiter optimiert werden.

    - -

    FĂŒr eine möglichst gute Optimierung sollten GIF Grafiken zu PNGs umkonvertiert werden. (Dies geht nicht mit ImageOptim.)

    +
    +

    OxiPNG

    +
    +
    Optimierungsgrad
    +
    +

    Anzahl der unterschiedlichen Einstellungskombinationen getestet. Es ist selten sinnvoll, sie zu alle versuchen.

    +
    +
    Erstelle die Bilder interlaced (progressive)
    +
    +

    Interlaced Bilder sehen besser aus, wenn sie teilweise geladen sind, aber in der Regel ist die Interlace Kompression weniger effizient.

    +

    Diese Checkbox hat drei ZustÀnde: Wenn aktiviert, werden Bilder gezwungen interlaced zuwerden. Wenn gemischt, es wird immer Datei Interlace unverÀndert , werden unkontrolliert von Interlace- Dateien zu entfernen.

    +
    +
    +
    +

    Gifsicle

    +

    FĂŒr beste Kompression, sollten Sie GIF-Dateien in PNG-Dateien (ImageOptim macht das nicht automatisch) konvertieren.

    +
    + + diff --git a/imageoptim/de.lproj/ImageOptim.strings b/imageoptim/de.lproj/ImageOptim.strings new file mode 100644 index 00000000..cb19a0a7 --- /dev/null +++ b/imageoptim/de.lproj/ImageOptim.strings @@ -0,0 +1,213 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Alle nach vorne bringen"; + +/* Menu Item "Window" */ +"19.title" = "Fenster"; + +/* Menu Item "Minimize" */ +"23.title" = "Im Dock ablegen"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Fenster"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "HauptmenĂŒ"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Dienste"; + +/* Menu Item "Services" */ +"131.title" = "Dienste"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ImageOptim ausblenden"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ImageOptim beenden"; + +/* Menu Item "Hide Others" */ +"145.title" = "Andere ausblenden"; + +/* Menu Item "Show All" */ +"150.title" = "Alle anzeigen"; + +/* Menu Item "Zoom" */ +"197.title" = "Zoomen"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Liste von Dateien, die auf die Optimierung warten"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Datei"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "GrĂ¶ĂŸe"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "GrĂ¶ĂŸe der Datei nach der Optimierung"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "GrĂ¶ĂŸe der Datei nach der Optimierung"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Ersparnis"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Über ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Einstellungen 
"; + +/* Menu Item "Edit" */ +"375.title" = "Bearbeiten"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Bearbeiten"; + +/* Menu Item "Select All" */ +"377.title" = "Alles auswĂ€hlen"; + +/* Menu Item "Undo" */ +"378.title" = "Widerrufen"; + +/* Menu Item "Redo" */ +"384.title" = "Wiederholen"; + +/* Menu Item "Cut" */ +"398.title" = "Ausschneiden"; + +/* Menu Item "Copy" */ +"399.title" = "Kopieren"; + +/* Menu Item "Paste" */ +"400.title" = "Einsetzen"; + +/* Menu Item "Delete" */ +"402.title" = "Löschen"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Neue Dateien oder Verzeichnisse hinzufĂŒgen"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "HinzufĂŒgen"; + +/* Menu Item "File" */ +"429.title" = "Ablage"; + +/* Top-level Main Menu "File" */ +"430.title" = "Ablage"; + +/* Menu Item "Add Files
" */ +"437.title" = "Dateien hinzufĂŒgen 
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimierungsstatus"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimierungsstatus"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Fenster schließen"; + +/* Menu Item "Help" */ +"504.title" = "Hilfe"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Hilfe"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim-Hilfe"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Über ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimierung wiederholen"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Nach Aktualisierungen suchen 
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Ziehen Sie Dateien zum Optimieren in den oberen Bereich."; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Erneut optimieren"; + +/* Button "Again" */ +"635.title" = "Wiederholen"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "Version"; + +/* TextFieldCell "version" */ +"646.title" = "Version"; + +/* Menu Item "Tools" */ +"655.title" = "Werkzeuge"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Werkzeuge"; + +/* Menu Item "Quick Look" */ +"708.title" = "Übersicht"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Bilder hier fallenlassen"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Fertige löschen"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimierte optimieren"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim-Website"; + +/* Menu Item "View Source" */ +"735.title" = "Quelltext ansehen"; + +/* Menu Item "Optimized Size" */ +"740.title" = "GrĂ¶ĂŸe"; + +/* Menu Item "Savings" */ +"741.title" = "Ersparnis"; + +/* Menu Item "Best tool" */ +"747.title" = "Werkzeug"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Werkzeug"; + +/* Menu Item "Original Size" */ +"791.title" = "OriginalgrĂ¶ĂŸe"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Orig. GrĂ¶ĂŸe"; + +/* Menu Item "Show Columns" */ +"809.title" = "Spalten anzeigen"; + +/* Menu Item "Donate" */ +"820.title" = "Spenden"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Auf Original zurĂŒcksetzen"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "QualitĂ€t: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Stopp"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Als Data-URL kopieren"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Im Finder anzeigen"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Verlustbehaftet"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Im Finder anzeigen"; + diff --git a/imageoptim/de.lproj/Localizable.strings b/imageoptim/de.lproj/Localizable.strings index 240c4e4e..9258814e 100644 --- a/imageoptim/de.lproj/Localizable.strings +++ b/imageoptim/de.lproj/Localizable.strings @@ -1,14 +1,55 @@ -"All neccessary tools have been disabled in Preferences" = "Alle benötigten Programme wurden in den Einstellungen deaktiviert"; -"Can't map file into memory" = "Die Datei konnte nicht in den Speicher geladen werden"; -"File cannot be optimized any further" = "Die Datei kann nicht mehr weiter optimiert werden"; -"File is neither PNG, GIF nor JPEG" = "Der Dateityp ist weder PNG noch JPEG"; -"Inspecting file" = "Analysiere die Datei"; +/* tooltip */ +"%@ failed to start" = "%@ konnte nicht gestartet werden"; + +/* undo command name */ +"Add" = "HinzufĂŒgen"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Alle benötigten Werkzeuge wurden in den Einstellungen deaktiviert"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Datei konnte nicht geöffnet werden"; + +/* undo command name */ +"Cut" = "Ausschneiden"; + +/* tooltip */ +"File cannot be optimized any further" = "Datei kann nicht weiter optimiert werden"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Dateityp ist weder PNG noch GIF oder JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim wird beendet, nachdem die Optimierung fertig ist."; + +/* tooltip */ +"Inspecting file" = "Datei wird untersucht"; + +/* newly added to the queue */ "New file" = "Neue Datei"; -"Optimized file could not be saved" = "Die optimierte Datei konnte nicht gespeichert werden"; + +/* status bar */ +"Lossy minification enabled" = "Verlustbehaftete Kompression aktivieren"; + +/* tooltip */ +"Optimized file could not be saved" = "Optimierte Datei konnte nicht gesichert werden"; + +/* tooltip */ "Optimized successfully with %@" = "Erfolgreich mit %@ optimiert"; -"Size of optimized file is 0" = "Die GrĂ¶ĂŸe der optimierten Datei ist 0"; + +/* tooltip */ +"Reverted to original" = "Auf Original zurĂŒcksetzen"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "%@ von %@ eingespart, insgesamt %@ (bis zu %@ pro Datei)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "%@ von %@ eingespart, im Durchschnitt %@ pro Datei (bis zu %@)"; + +/* command name, tooltip */ "Started %@" = "%@ wurde gestartet"; -"Waiting in queue" = "In der Warteschleife"; -"Waiting to be optimized" = "Warte auf Optimierung"; -"Waiting to start more optimizations" = "Warte darauf weitere Optimierungen starten zu können"; -"%@ failed to start" = "%@ konnte nicht gestartet werden"; \ No newline at end of file + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Warte weitere Optimierungen zu starten"; + diff --git a/imageoptim/de.lproj/MainMenu.xib b/imageoptim/de.lproj/MainMenu.xib deleted file mode 100644 index e8dc14af..00000000 --- a/imageoptim/de.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Optimierungsstatus - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Name - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - GrĂ¶ĂŸe (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - GrĂ¶ĂŸe - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Komprimierung - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Werkzeuge - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Dateien per Drag'n'drop zur Liste oben hinzufĂŒgen - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - HinzufĂŒgen - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{396, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{420, 6}, {109, 25}} - - YES - - 67239424 - 134217728 - Wiederholen - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Fertige löschen - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - HauptmenĂŒ - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Über ImageOptim - - 2147483647 - - - - - - Nach Updates suchen
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Einstellungen
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Dienste - - 1048576 - 2147483647 - - - submenuAction: - - Dienste - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ImageOptim ausblenden - h - 1048576 - 2147483647 - - - - - - Andere ausblenden - h - 1572864 - 2147483647 - - - - - - Alle anzeigen - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Beende ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Datei - - 1048576 - 2147483647 - - - submenuAction: - - Datei - - - - Dateien hinzufĂŒgen
 - o - 1048576 - 2147483647 - - - - - - Optimierung wiederholen - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Schließen - w - 1048576 - 2147483647 - - - - - - - - - Bearbeiten - - 1048576 - 2147483647 - - - submenuAction: - - Bearbeiten - - - - Wiederrufen - z - 1048576 - 2147483647 - - - - - - Wiederholen - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Ausschneiden - x - 1048576 - 2147483647 - - - - - - Kopieren - c - 1048576 - 2147483647 - - - - - - EinfĂŒgen - v - 1048576 - 2147483647 - - - - - - Löschen - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Alle auswĂ€hlen - a - 1048576 - 2147483647 - - - - - - - - - Werkzeuge - - 2147483647 - - - submenuAction: - - Werkzeuge - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Fenster - - 1048576 - 2147483647 - - - submenuAction: - - Fenster - - - - Im Dock ablegen - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Alle anzeigen - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - GrĂ¶ĂŸe (original) - - 2147483647 - - - - - - GrĂ¶ĂŸe - - 2147483647 - 1 - - - - - - Komprimierung - - 2147483647 - 1 - - - - - - Werkzeuge - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Hilfe - - 1048576 - 2147483647 - - - submenuAction: - - Hilfe - - - - ImageOptim Hilfe - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Über ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - version - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - GrĂ¶ĂŸe - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Liste der Dateien die auf die Optimierung warten - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Neue Dateien oder Verzeichnisse hinzufĂŒgen - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimierungsstatus - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/de.lproj/PrefsController.strings b/imageoptim/de.lproj/PrefsController.strings new file mode 100644 index 00000000..d4fdef65 --- /dev/null +++ b/imageoptim/de.lproj/PrefsController.strings @@ -0,0 +1,62 @@ +/* Window title */ +"5.title" = "ImageOptim-Einstellungen"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Allgemein"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimierung"; + +/* Tab quality (for lossy minification) */ +"177.label" = "QualitĂ€t"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Sichern der Dateien"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Dateiberechtigungen, -attribute und Hardlinks erhalten"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimierungsgrad"; + +/* "Fast" */ +"819.title" = "Schnell"; + +/* "Insane" */ +"820.title" = "Wahnsinnig"; + +/* Checkbox in Preferences */ +"854.title" = "PNG-Metadaten (Gamma, Farbprofil, optionale Chunks) entfernen"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Web-Browser erwarten entfernte Gamma-Daten."; + +/* label "JPEG quality" */ +"868.title" = "JPEG-QualitĂ€t"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG-Metadaten (EXIF, Farbprofil, GPS, Ausrichtung, 
) entfernen"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadaten und Farbprofile"; + +/* Header above list of tools to enable */ +"1107.title" = "Aktivieren"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Sichern auf Netzlaufwerken wird hierduch langsamer."; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Nicht empfohlen bei eingebetteten Copyright-Informationen."; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF QualitĂ€t"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Erstellt viel kleinere Dateien, die aber anders aussehen können"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG-QualitĂ€t"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Verlustbehaftete Kompression aktivieren"; diff --git a/imageoptim/de.lproj/PrefsController.xib b/imageoptim/de.lproj/PrefsController.xib deleted file mode 100644 index 1c00c850..00000000 --- a/imageoptim/de.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim Einstellungen - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Dateiberechtigungen, -attribute und Hardlinks erhalten - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Quelldatei vor dem Speichern sichern - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Speichern der Dateien - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Entferne alle optionalen Segmente - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Web Browser erwarten entfernte Gamma Daten - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Entferne EXIF Markierungen und Kommentare - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Aktiviert - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - Allgemein - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Art der Optimierung - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Einfach - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Wahnsinnig - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intensiv - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - LĂ€ngste Übereinstimmung - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Versuche verschiedene Filter - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Breche bei zu langer Optimierung ab - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Erstelle die Bilder interlaced (progressive) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Grad der Optimierung - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Diese Dateien sind fĂŒr gewöhnlich grĂ¶ĂŸer - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 Versuche - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 Versuche - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Grad der Optimierung - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Schnell - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Wahnsinnig - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Maximale QualitĂ€t - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/debug.xcconfig b/imageoptim/debug.xcconfig index 34c75c42..68470c17 100644 --- a/imageoptim/debug.xcconfig +++ b/imageoptim/debug.xcconfig @@ -1,8 +1,8 @@ #include "release.xcconfig" -GCC_OPTIMIZATION_LEVEL = 0; -DEAD_CODE_STRIPPING = NO; +GCC_OPTIMIZATION_LEVEL = 2; +CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = NO; GCC_WARN_UNINITIALIZED_AUTOS = NO; DEPLOYMENT_POSTPROCESSING = NO; -COPY_PHASE_STRIP = NO; ONLY_ACTIVE_ARCH = YES; -STRIP_STYLE = debugging \ No newline at end of file +ENABLE_TESTABILITY = YES; +OTHER_CODE_SIGN_FLAGS = --timestamp=none diff --git a/imageoptim/defaults.plist b/imageoptim/defaults.plist index 23664b03..68938181 100644 --- a/imageoptim/defaults.plist +++ b/imageoptim/defaults.plist @@ -2,45 +2,49 @@ + LossyEnabled + + JpegOptimMaxQuality + 80 + PngMinQuality + 80 AdvPngEnabled AdvPngLevel 4 JpegOptimEnabled - JpegOptimMaxQuality - 100 JpegTranStripAll JpegTranEnabled - JpegRescanEnabled - OptiPngEnabled - OptiPngLevel - 6 - PngCrushEnabled - + PngCrush2Enabled + PngOutEnabled - PngOutLevel - 3 PngOutRemoveChunks - PngOutInterruptIfTakesTooLong + SvgcleanerEnabled + + ZopfliEnabled GifsicleEnabled + GifQuality + 80 PreservePermissions + PreserveDates + RunConcurrentDirscans 2 - RunConcurrentTasks - 2 + RunConcurrentFiles + 4 RunLowPriority - BackupFiles - + BounceDock + diff --git a/imageoptim/el.lproj/Credits.html b/imageoptim/el.lproj/Credits.html new file mode 100644 index 00000000..7815ba20 --- /dev/null +++ b/imageoptim/el.lproj/Credits.html @@ -0,0 +1,29 @@ +
    +

    ImageOptim by Kornel LesiƄski and contributors is a GUI for 3rd party utilities:

    + +

    ImageOptim can be redistributed and modified under GNU General Public License version 2 or later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/el.lproj/Help/index.html b/imageoptim/el.lproj/Help/index.html new file mode 100644 index 00000000..e605a33a --- /dev/null +++ b/imageoptim/el.lproj/Help/index.html @@ -0,0 +1,74 @@ + + + + +Codestin Search App + + + + + +

    ImageOptim

    + +

    Πώς χρησÎčÎŒÎżÏ€ÎżÎčÎ”ÎŻÏ„Î±Îč

    + +
      +
    1. ÎŁÏÏÎ”Ï„Î” ÎșαÎč Î±Ï†ÎźÏƒÏ„Î” Î±ÏÏ‡Î”ÎŻÎ± PNG, JPEG Îź φαÎșÎ­Î»ÎżÏ…Ï‚ Όέσα ÏƒÏ„Îż ÎșΔΜτρÎčÎșό Ï€Î±ÏÎŹÎžÏ…ÏÎż Ï„ÎżÏ… ImageOptim
    2. + +
    3. ΠΔρÎčΌέΜΔτΔ ΌέχρÎč Μα τΔλΔÎčώσΔÎč.
    4. + +
    5. ÎšÎ­ÏÎŽÎżÏ‚! (από ÎŒÎčÎșρότΔρα Î±ÏÏ‡Î”ÎŻÎ±)
    6. +
    +

    ÎœÏ€ÎżÏÎ”ÎŻÏ„Î” Î”Ï€ÎŻÏƒÎ”Îčς Μα ÏÎŻÎŸÎ”Ï„Î” Î±ÏÏ‡Î”ÎŻÎ± ÏƒÏ„Îż ΔÎčÎșÎżÎœÎŻÎŽÎčÎż Ï„ÎżÏ… ImageOptim ÏƒÏ„Îż Dock

    + +

    ÎœÎŹÎžÎ”Ï„Î” πως Μα Î±Î»Î»ÎŹÎ¶Î”Ï„Î” τÎčς Î ÏÎżÏ„ÎčÎŒÎźÏƒÎ”Îčς.

    + +

    Î•Ï€Î”ÎŸÎźÎłÎ·ÏƒÎ· ΔÎčÎșÎżÎœÎčÎŽÎŻÏ‰Îœ

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkΗ ΔÎčÎșόΜα έχΔÎč ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčηΞΔί ΌΔ ΔπÎčÏ„Ï…Ï‡ÎŻÎ±.
    Green XΌλα Ï€ÎźÎłÎ±Îœ ÎŒÎčα Ï‡Î±ÏÎŹ, αλλΏ η ΔÎčÎșόΜα ΎΔΜ Ξα ÎŒÏ€ÎżÏÎżÏÏƒÎ” Μα ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčηΞΔί πΔραÎčτέρω.
    Gray starΗ ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ· Î±Ï…Ï„ÎżÏ Ï„ÎżÏ… Î±ÏÏ‡Î”ÎŻÎżÏ… ÎČÏÎŻÏƒÎșΔταÎč σΔ ΔΟέλÎčΟη.
    Gray dots΀ο Î±ÏÏ‡Î”ÎŻÎż Î”ÎŻÎœÎ±Îč στηΜ ÎżÏ…ÏÎŹ ÎłÎčα ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·, ÎŒÎ”Ï„ÎŹ Ï„Îż Ï„Î­Î»ÎżÏ‚ τωΜ ÎŹÎ»Î»Ï‰Îœ.
    Orange exclamation markÎ Î±ÏÎżÏ…ÏƒÎčÎŹÏƒÏ„Î·ÎșΔ ÏƒÏ†ÎŹÎ»ÎŒÎ± ÎșÎ±Ï„ÎŹ τη ÎŽÎčÎŹÏÎșΔÎčα της ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚. Θα ÎČÏÎ”ÎŻÏ„Î” Î”ÎŸÎźÎłÎ·ÏƒÎ· ΔÎșτΔλώΜτας Ï„Îż Console.app.
    +

    Πώς λΔÎčÏ„ÎżÏ…ÏÎłÎ”ÎŻ

    + +

    ΀ο ImageOptim Î”ÎŻÎœÎ±Îč έΜα front-end (GUI) ÎłÎčα αυτές τÎčς Î”Ï†Î±ÏÎŒÎżÎłÎ­Ï‚:

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • ÎșαÎč Ï€ÏÎżÎ±ÎčρΔτÎčÎșÎŹ PNGOUT.
    • +
    +

    ΀ο ImageOptim τα τρέχΔÎč, ÎșαÎč ΔπÎčλέγΔÎč αυτόΌατα Ï„Îż ÎŒÎčÎșÏÏŒÏ„Î”ÏÎż Î±ÏÏ‡Î”ÎŻÎż.

    + + diff --git a/imageoptim/el.lproj/Help/prefs.html b/imageoptim/el.lproj/Help/prefs.html new file mode 100644 index 00000000..768579be --- /dev/null +++ b/imageoptim/el.lproj/Help/prefs.html @@ -0,0 +1,75 @@ + + + +Codestin Search App + + + + + +

    Î ÏÎżÏ„ÎčÎŒÎźÏƒÎ”Îčς ImageOptim

    +

    « ΕπÎčÏƒÏ„ÏÎżÏ†Îź στηΜ ÎșΔΜτρÎčÎșÎź

    +

    ΓΔΜÎčÎșές Ï€ÏÎżÏ„ÎčÎŒÎźÏƒÎ”Îčς

    +
    +
    ΔÎčÎ±Ï„ÎźÏÎ·ÏƒÎ· ÎŽÎčÎșαÎčÏ‰ÎŒÎŹÏ„Ï‰Îœ Î±ÏÏ‡Î”ÎŻÏ‰Îœ, χαραÎșτηρÎčστÎčÎșώΜ ÎșαÎč hardlinks
    +
    +

    Î‘ÎœÏ„ÎŻ Μα ÎŽÎčÎ±ÎłÏÎŹÏˆÎ”Ï„Î” Ï„Îż παλÎčό Î±ÏÏ‡Î”ÎŻÎż ΎηΌÎčÎżÏ…ÏÎłÏŽÎœÏ„Î±Ï‚ έΜα ÎșαÎčÎœÎżÏÏÎłÎčÎż ΌΔ Ï„Îż ÎŻÎŽÎčÎż ÏŒÎœÎżÎŒÎ±, Î±Ï€Î»ÎŹ αΜτÎčÎșαΞÎčÏƒÏ„ÎŹ Ï„Îż παλÎčό Î±ÏÏ‡Î”ÎŻÎż ΔπÎčÏ„ÏŒÏ€ÎżÏ…. Αυτό Î”ÎŸÎ±ÏƒÏ†Î±Î»ÎŻÎ¶Î”Îč ότÎč όλα τα hardlinks, ÏƒÏ…ÎœÏ„ÎżÎŒÎ”ÏÏƒÎ”Îčς, ÎŽÎčÎșαÎčώΌατα ÎșαÎč χαραÎșτηρÎčστÎčÎșÎŹ Ï„ÎżÏ… Î±ÏÏ‡Î”ÎŻÎżÏ… Ξα Ï€Î±ÏÎ±ÎŒÎ”ÎŻÎœÎżÏ…Îœ ÎŻÎŽÎčα.

    +

    Î•ÎŻÎœÎ±Îč Δλαφρώς πÎčÎż ÎłÏÎźÎłÎżÏÎż Ï‡Ï‰ÏÎŻÏ‚ τηΜ ÎŽÎčÎ±Ï„ÎźÏÎ·ÏƒÎ· ÎŽÎčÎșαÎčÏ‰ÎŒÎŹÏ„Ï‰Îœ.

    +
    +
    Strip PNG ÎŒÎ”Ï„Î±ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÏ‰Îœ (gamma, color profiles, optional chunks)
    +
    +

    ΀α PNG Î±ÏÏ‡Î”ÎŻÎ± ÎŒÏ€ÎżÏÎ”ÎŻ Μα Î­Ï‡ÎżÏ…Îœ ÎŽÎčÎ±Ï†ÎżÏÎ”Ï„ÎčÎșÎź φωτΔÎčΜότητα ÎșαÎč ÎșÎżÏÎ”ÏƒÎŒÏŒ σΔ ÎŽÎčÎ±Ï†ÎżÏÎ”Ï„ÎčÎșÎżÏÏ‚ Ï†Ï…Î»Î»ÎżÎŒÎ”Ï„ÏÎ·Ï„Î­Ï‚, ΔπΔÎčÎŽÎź ΎΔΜ τα Ï…Ï€ÎżÏƒÏ„Î·ÏÎŻÎ¶ÎżÏ…Îœ Ï„Îż ÎŻÎŽÎčÎż. Η Î±Ï†Î±ÎŻÏÎ”ÏƒÎ· αυτώΜ τωΜ Ï€Î»Î·ÏÎżÏ†ÎżÏÎčώΜ ÎșαΞÎčÏƒÏ„ÎŹ Ï„Îż Î±ÏÏ‡Î”ÎŻÎż "πÎčÎż ÏŒÎŒÎżÎčÎż" σΔ ÏŒÎ»ÎżÏ…Ï‚ Ï„ÎżÏ…Ï‚ Ï†Ï…Î»Î»ÎżÎŒÎ”Ï„ÏÎ·Ï„Î­Ï‚ ÎșαÎč ΌΔÎčώΜΔÎč Ï„Îż ÎŒÎ­ÎłÎ”ÎžÎżÏ‚ Ï„ÎżÏ….

    +

    ΆλλΔς αόρατΔς Ï€Î»Î·ÏÎżÏ†ÎżÏÎŻÎ”Ï‚ αφαÎčÏÎżÏÎœÏ„Î±Îč, όπως DPI ÎșαÎč σχόλÎčα.

    +
    +
    Strip JPEG ÎŒÎ”Ï„Î±ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÏ‰Îœ (EXIF, color profiles, GPS, rotation, Îșλπ.)
    +
    +

    ΑφαÎčÏÎ”ÎŻ τα ÎŒÎ”Ï„Î±ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÎ± της ΔÎčÎșόΜας, όπως Ï„Îż Ï€ÏÎżÏ†ÎŻÎ» Ï‡ÏÏ‰ÎŒÎŹÏ„Ï‰Îœ, Ï‡ÏÏŒÎœÎż έÎșΞΔσης, ÏƒÏ…ÎœÏ„Î”Ï„Î±ÎłÎŒÎ­ÎœÎ”Ï‚ GPS, ÎŒÎżÎœÏ„Î­Î»Îż ÎșÎŹÎŒÎ”ÏÎ±Ï‚ ÎșαÎč Ï„Îż ÏŒÎœÎżÎŒÎ± Ï„ÎżÏ… λογÎčσΌÎčÎșÎżÏ Ï€ÎżÏ… χρησÎčÎŒÎżÏ€ÎżÎčÎ”ÎŻÏ„Î±Îč ÎłÎčα τη ΎηΌÎčÎżÏ…ÏÎłÎŻÎ± Ï„ÎżÏ… Î±ÏÏ‡Î”ÎŻÎżÏ….

    +

    ΕΜσωΌατωΌέΜΔς Ï€Î»Î·ÏÎżÏ†ÎżÏÎŻÎ”Ï‚ πΜΔυΌατÎčÎșώΜ ÎŽÎčÎșαÎčÏ‰ÎŒÎŹÏ„Ï‰Îœ αφαÎčÏÎżÏÎœÏ„Î±Îč. ΠαραÎșÎ±Î»Î”ÎŻÏƒÏ„Î” Μα σηΌΔÎčώσΔτΔ ότÎč ÎłÎ”ÎœÎčÎșÎŹ ΔÎčÎșόΜΔς Ï€ÏÎżÏƒÏ„Î±Ï„Î”ÏÎżÎœÏ„Î±Îč από ÎœÏŒÎŒÎż Ï€Î”ÏÎŻ πΜΔυΌατÎčÎșώΜ ÎŽÎčÎșαÎčÏ‰ÎŒÎŹÏ„Ï‰Îœ Î±ÎœÎ”ÎŸÎŹÏÏ„Î·Ï„Î± Î”ÎŻÏ„Î” πΔρÎčÎ­Ï‡ÎżÏ…Îœ Ï„Î­Ï„ÎżÎčα Î±ÏŒÏÎ±Ï„Îż ÎŒÎ”Ï„Î±ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÏ‰Îœ Îź όχÎč.

    +
    +
    +

    Î•ÏÎłÎ±Î»Î”ÎŻÎ±

    +

    ΀α Zopfli ÎșαÎč PNGOUT Î”ÎŻÎœÎ±Îč Ï€ÎżÎ»Ï Îșαλοί PNG συΌπÎčΔστές, αλλΏ ÎșαÎč Ï€ÎżÎ»Ï Î±ÏÎłÎżÎŻ. Î‘Ï€Î”ÎœÎ”ÏÎłÎżÏ€ÎżÎčÎźÏƒÏ„Î” Ï„ÎżÏ…Ï‚ αΜ χρΔÎčÎŹÎ¶Î”Ï„Î±Îč Μα ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčÎźÏƒÎ”Ï„Î” PNG Î±ÏÏ‡Î”ÎŻÎ± ÎłÏÎźÎłÎżÏÎ± (Î±Ï†ÎźÏƒÏ„Î” ÎŒÏŒÎœÎż Ï„Îż AdvPNG ÎłÎčα ταχύτΔρη ÎșαÎč ÏƒÏ…ÎłÏ‡ÏÏŒÎœÏ‰Ï‚ ÎșαλΟ ÏƒÏ…ÎŒÏ€ÎŻÎ”ÏƒÎ·).

    +

    ΀α Zopfli ÎșαÎč OxiPNG Ξα ÎșÎ±ÎžÎ±ÏÎŻÏƒÎżÏ…Îœ τÎčς RGB τÎčΌές ÎŽÎčÎŹÏ†Î±ÎœÏ‰Îœ pixel (ÎłÎœÏ‰ÏƒÏ„ÎŹ ως «dirty alpha»). Î‘Ï€Î”ÎœÎ”ÏÎłÎżÏ€ÎżÎčÎźÏƒÎ”Ï„Î” Î±Ï…Ï„ÎŹ τα ÎŽÏÎż Î”ÏÎłÎ±Î»Î”ÎŻÎ±, Î”ÎŹÎœ ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčÎ”ÎŻÏ„Î±Îč Î±ÏÏ‡Î”ÎŻÎ± Ï€ÎżÏ… χρησÎčÎŒÎżÏ€ÎżÎčÎżÏÎœ ÎŹÎ»Ï†Î± ÎșÎ±ÎœÎŹÎ»Îč ÎłÎčα ÎșÎŹÏ„Îč Ώλλο ΔÎșτός από ÎŽÎčÎ±Ï†ÎŹÎœÎ”Îčα.

    +
    +

    JPEGOptim

    +
    +
    ΜέγÎčστη Ï€ÎżÎčότητα
    +
    +

    Î•ÎŹÎœ ÎżÏÎčÏƒÏ„Î”ÎŻ σΔ 100%, η ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ· Ξα Î”ÎŻÎœÎ±Îč Ï‡Ï‰ÏÎŻÏ‚ απώλΔÎčΔς.

    +

    ΟτÎčÎŽÎźÏ€ÎżÏ„Î” ÎșÎŹÏ„Ï‰ από Ï„Îż 100% Ξα Ï€ÏÎżÎșαλέσΔÎč χαΌηλότΔρη Ï€ÎżÎčότητα Î±ÏÏ‡Î”ÎŻÏ‰Îœ αΜ Ï†Î±ÎŻÎœÎ”Ï„Î±Îč Μα Î­Ï‡ÎżÏ…Îœ ÏƒÏ‰ÎžÎ”ÎŻ ΌΔ υψηλότΔρη ρύΞΌÎčση Ï€ÎżÎčότητας.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Î€ÏÏ€ÎżÏ‚ ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚
    +
    +

    ΀ο PNGOUT Î”ÎŻÎœÎ±Îč Ï€ÎżÎ»Ï Î±Ï€ÎżÏ„Î”Î»Î”ÏƒÎŒÎ±Ï„ÎčÎșό, αλλΏ Ï€ÎżÎ»Ï Î±ÏÎłÏŒ. ΧρησÎčÎŒÎżÏ€ÎżÎčÎźÏƒÏ„Î” Ï„Îż Ï‡Î±ÎŒÎ·Î»ÏŒÏ„Î”ÏÎż Î”Ï€ÎŻÏ€Î”ÎŽÎż, Î”ÎŹÎœ Î”ÎŻÏƒÏ„Î” Î±ÎœÏ…Ï€ÏŒÎŒÎżÎœÎżÎč.

    +
    +
    ΔÎčαÎșÎżÏ€Îź Î”ÎŹÎœ Ï€Î±ÎŻÏÎœÎ”Îč Ï€ÎŹÏÎ± Ï€ÎżÎ»Ï ώρα
    +
    +

    ΀ο PNGOUT ÎŒÏ€ÎżÏÎ”ÎŻ Μα χρΔÎčÎ±ÏƒÏ„Î”ÎŻ Ï€ÎżÎ»Ï Ï‡ÏÏŒÎœÎż ÎłÎčα Μα ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčÎźÏƒÎ”Îč τÎčς Ï€ÎżÎ»Ï ÎŒÎ”ÎłÎŹÎ»Î”Ï‚ ΔÎčÎșόΜΔς. Î‘Ï…Ï„Îź η ΔπÎčλογΟ ÎŽÎčαÎșόπτΔÎč Ï„Îż PNGOUT ÎŒÎ”Ï„ÎŹ από 1 λΔπτό.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Î•Ï€ÎŻÏ€Î”ÎŽÎż ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚
    +
    +

    ΑρÎčΞΌός ÎŽÎčÎ±Ï†ÎżÏÎ”Ï„ÎčÎșώΜ συΜΎυασΌώΜ Î­Ï‡ÎżÏ…Îœ ÎŽÎżÎșÎčÎŒÎ±ÏƒÏ„Î”ÎŻ. ÎŁÏ€ÎŹÎœÎčα έχΔÎč ΜόηΌα Μα τα ÎŽÎżÎșÎčÎŒÎŹÏƒÎżÏ…ÎŒÎ” όλα.

    +
    +
    ÎšÎŹÎœÎ”Îč ΔÎčÎșόΜΔς interlaced (progressive)
    +
    +

    ΟÎč interlaced ΔÎčÎșόΜΔς Ï†Î±ÎŻÎœÎżÎœÏ„Î±Îč ÎșαλύτΔρα όταΜ Î”ÎŻÎœÎ±Îč Ï†ÎżÏÏ„Ï‰ÎŒÎ­ÎœÎ”Ï‚ ΔΜ ΌέρΔÎč, αλλΏ ÏƒÏ…ÎœÎźÎžÏ‰Ï‚ η ÏƒÏ…ÎŒÏ€ÎŻÎ”ÏƒÎ· Î”ÎŻÎœÎ±Îč λÎčÎłÏŒÏ„Î”ÏÎż Î±Ï€ÎżÏ„Î”Î»Î”ÏƒÎŒÎ±Ï„ÎčÎșÎź.

    +

    Αυτό Ï„Îż Ï€Î»Î±ÎŻÏƒÎčÎż Î”Î»Î­ÎłÏ‡ÎżÏ… έχΔÎč τρΔÎčς ÎșÎ±Ï„Î±ÏƒÏ„ÎŹÏƒÎ”Îčς: ΕπÎčÎ»Î”ÎłÎŒÎ­ÎœÎż (1 ÎșλÎčÎș), Î”ÎŸÎ±ÎœÎ±ÎłÎșΏζΔÎč τÎčς ΔÎčÎșόΜΔς σΔ interlaced. ΕπÎčÎ»Î”ÎłÎŒÎ­ÎœÎż (2 ÎșλÎčÎș), Ξα ÎșÏÎ±Ï„ÎźÏƒÎ”Îč Ï„Îż interlace Î±ÏÏ‡Î”ÎŻÎż Î±ÎŒÎ”Ï„ÎŹÎČÎ»Î·Ï„Îż. Î‘Ï€ÎżÎ”Ï€ÎčÎ»Î”ÎłÎŒÎ­ÎœÎż Ξα ÎșÎ±Ï„ÎŹÏÎłÎ·ÏƒÎ”Îč Ï„Îż interlace από τα Î±ÏÏ‡Î”ÎŻÎ±.

    +
    +
    +
    +
    +

    Gifsicle

    +

    ΓÎčα τηΜ ÎșαλύτΔρη ÏƒÏ…ÎŒÏ€ÎŻÎ”ÏƒÎ·, Ξα πρέπΔÎč Μα ΌΔτατρέψΔÎč τα Î±ÏÏ‡Î”ÎŻÎ± GIF σΔ PNGs (΀ο ImageOptim ΎΔΜ Ï„Îż ÎșÎŹÎœÎ”Îč αυτό αυτόΌατα).

    +
    + + diff --git a/imageoptim/el.lproj/ImageOptim.strings b/imageoptim/el.lproj/ImageOptim.strings new file mode 100644 index 00000000..09b9c283 --- /dev/null +++ b/imageoptim/el.lproj/ImageOptim.strings @@ -0,0 +1,216 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "ÎœÎ”Ï„Î±Ï†ÎżÏÎŹ όλωΜ σΔ Ï€ÏÏŽÏ„Îż Ï€Î»ÎŹÎœÎż"; + +/* Menu Item "Window" */ +"19.title" = "Î Î±ÏÎŹÎžÏ…ÏÎż"; + +/* Menu Item "Minimize" */ +"23.title" = "ΕλαχÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Î Î±ÏÎŹÎžÏ…ÏÎż"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "ÎšÏ…ÏÎŻÏ‰Ï‚ ÎŒÎ”ÎœÎżÏ"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Î„Ï€Î·ÏÎ”ÏƒÎŻÎ”Ï‚"; + +/* Menu Item "Services" */ +"131.title" = "Î„Ï€Î·ÏÎ”ÏƒÎŻÎ”Ï‚"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ΑπόÎșρυψη "; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ÎˆÎŸÎżÎŽÎżÏ‚ "; + +/* Menu Item "Hide Others" */ +"145.title" = "ΑπόÎșρυψη ÎŹÎ»Î»Ï‰Îœ"; + +/* Menu Item "Show All" */ +"150.title" = "Î•ÎŒÏ†ÎŹÎœÎčση όλωΜ"; + +/* Menu Item "Zoom" */ +"197.title" = "ÎœÎ”ÎłÎ­ÎžÏ…ÎœÏƒÎ·"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Î›ÎŻÏƒÏ„Î± Î±ÏÏ‡Î”ÎŻÏ‰Îœ Ï€ÏÎżÏ‚ ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Î‘ÏÏ‡Î”ÎŻÎż"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "ÎœÎ­ÎłÎ”ÎžÎżÏ‚"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "ÎœÎ­ÎłÎ”ÎžÎżÏ‚ ÎŒÎ”Ï„ÎŹ τηΜ ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "ÎœÎ­ÎłÎ”ÎžÎżÏ‚ ÎŒÎ”Ï„ÎŹ τηΜ ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "ΚέρΎη"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "ÎšÎ±Ï„ÎŹÏƒÏ„Î±ÏƒÎ·"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Î Î”ÏÎŻ ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Î ÏÎżÏ„ÎčÎŒÎźÏƒÎ”Îčς..."; + +/* Menu Item "Edit" */ +"375.title" = "Î•Ï€Î”ÎŸÎ”ÏÎłÎ±ÏƒÎŻÎ±"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Î•Ï€Î”ÎŸÎ”ÏÎłÎ±ÏƒÎŻÎ±"; + +/* Menu Item "Select All" */ +"377.title" = "ΕπÎčλογΟ όλωΜ"; + +/* Menu Item "Undo" */ +"378.title" = "Î‘ÎœÎ±ÎŻÏÎ”ÏƒÎ·"; + +/* Menu Item "Redo" */ +"384.title" = "ΑÎșύρωση Î±ÎœÎ±ÎŻÏÎ”ÏƒÎ·Ï‚"; + +/* Menu Item "Cut" */ +"398.title" = "Î‘Ï€ÎżÎșÎżÏ€Îź"; + +/* Menu Item "Copy" */ +"399.title" = "ΑΜτÎčÎłÏÎ±Ï†Îź"; + +/* Menu Item "Paste" */ +"400.title" = "ΕπÎčÎșόλληση"; + +/* Menu Item "Delete" */ +"402.title" = "ΔÎčÎ±ÎłÏÎ±Ï†Îź"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Î ÏÎżÏƒÎžÎźÎșη ΜέωΜ Î±ÏÏ‡Î”ÎŻÏ‰Îœ Îź φαÎșέλωΜ"; + +/* Menu Item "File" */ +"429.title" = "Î‘ÏÏ‡Î”ÎŻÎż"; + +/* Top-level Main Menu "File" */ +"430.title" = "Î‘ÏÏ‡Î”ÎŻÎż"; + +/* Menu Item "Add Files
" */ +"437.title" = "Î ÏÎżÏƒÎžÎźÎșη Î±ÏÏ‡Î”ÎŻÏ‰Îœ..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "ÎšÎ±Ï„ÎŹÏƒÏ„Î±ÏƒÎ· ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "ÎšÎ±Ï„ÎŹÏƒÏ„Î±ÏƒÎ· ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "ÎšÎ»Î”ÎŻÏƒÎčÎŒÎż"; + +/* Menu Item "Help" */ +"504.title" = "ΒοΟΞΔÎčα"; + +/* Top-level Main Menu "Help" */ +"505.title" = "ΒοΟΞΔÎčα"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ΒοΟΞΔÎčα ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Î Î”ÏÎŻ ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "ΒΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ· ÎŸÎ±ÎœÎŹ"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "ÎˆÎ»Î”ÎłÏ‡ÎżÏ‚ ÎłÎčα ΔΜηΌΔρώσΔÎčς..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "ÎŁÏÏÎ”Ï„Î” ÎșαÎč Î±Ï†ÎźÏƒÏ„Î” ΔÎčÎșόΜΔς στηΜ πΔρÎčÎżÏ‡Îź Î”Ï€ÎŹÎœÏ‰"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Î ÏÎżÏƒÎžÎźÎșη"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "ΕÎșτέλΔση ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚ ÎŸÎ±ÎœÎŹ"; + +/* Button "Again" */ +"635.title" = "ÎžÎ±ÎœÎŹ"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "ÎšÎ±Ï„ÎŹÏƒÏ„Î±ÏƒÎ·"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "ΈÎșÎŽÎżÏƒÎ·"; + +/* TextFieldCell "version" */ +"646.title" = "ΈÎșÎŽÎżÏƒÎ·"; + +/* Menu Item "Tools" */ +"655.title" = "Î•ÏÎłÎ±Î»Î”ÎŻÎ±"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Î•ÏÎłÎ±Î»Î”ÎŻÎ±"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "ÎŁÏÏÎ”Ï„Î” ÎșαÎč Î±Ï†ÎźÏƒÏ„Î” ΔÎčÎșόΜΔς ΔΎώ"; + +/* Menu Item "Delete Completed" */ +"721.title" = "ÎŸÎ»ÎżÎșÎ»ÎźÏÏ‰ÏƒÎ· ÎŽÎčÎ±ÎłÏÎ±Ï†ÎźÏ‚"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "ΒΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčΟΞηÎșΔ"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "Î™ÏƒÏ„ÎżÏ„ÏŒÏ€ÎżÏ‚ "; + +/* Menu Item "View Source" */ +"735.title" = "Î•ÎŒÏ†ÎŹÎœÎčση Ï€ÏÎżÎ­Î»Î”Ï…ÏƒÎ·Ï‚"; + +/* Menu Item "Optimized Size" */ +"740.title" = "ΒΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčÎ·ÎŒÎ­ÎœÎż ÎŒÎ­ÎłÎ”ÎžÎżÏ‚"; + +/* Menu Item "Savings" */ +"741.title" = "ΚέρΎη"; + +/* Menu Item "Best tool" */ +"747.title" = "ΒέλτÎčÏƒÏ„Îż Î”ÏÎłÎ±Î»Î”ÎŻÎż"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "ΒέλτÎčÏƒÏ„Îż Î”ÏÎłÎ±Î»Î”ÎŻÎż"; + +/* Menu Item "Original Size" */ +"791.title" = "ΑρχÎčÎșό ÎŒÎ­ÎłÎ”ÎžÎżÏ‚"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "ΑρχÎčÎșό ÎŒÎ­ÎłÎ”ÎžÎżÏ‚"; + +/* Menu Item "Show Columns" */ +"809.title" = "Î•ÎŒÏ†ÎŹÎœÎčση στηλώΜ"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Î•Ï€Î±ÎœÎ±Ï†ÎżÏÎŹ ÏƒÏ„Îż αρχÎčÎșό Î±ÏÏ‡Î”ÎŻÎż"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "ΠοÎčότητα: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "ÎŁÏ„Î±ÎŒÎŹÏ„Î·ÎŒÎ±"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "ΑΜτÎčÎłÏÎ±Ï†Îź ως ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÎ± URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Î•ÎŒÏ†ÎŹÎœÎčση ÏƒÏ„Îż Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "ΑπωλΔστÎčÎșÎź ÏƒÏ…ÎŒÏ€ÎŻÎ”ÏƒÎ·"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Î•ÎŒÏ†ÎŹÎœÎčση ÏƒÏ„Îż Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "ÎšÎ±Ï„ÎŹÏƒÏ„Î±ÏƒÎ·"; + diff --git a/imageoptim/el.lproj/Localizable.strings b/imageoptim/el.lproj/Localizable.strings new file mode 100644 index 00000000..a8a829bc --- /dev/null +++ b/imageoptim/el.lproj/Localizable.strings @@ -0,0 +1,55 @@ +/* tooltip */ +"%@ failed to start" = "%@ απέτυχΔ η έΜαρΟη"; + +/* undo command name */ +"Add" = "Î ÏÎżÏƒÎžÎ·Îșη"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Oλα τα απαÎčÏ„ÎżÏÎŒÎ”ÎœÎ± Î”ÏÎłÎ±Î»Î”ÎŻÎ± Î­Ï‡ÎżÏ…Îœ Î±Ï€Î”ÎœÎ”ÏÎłÎżÏ€ÎżÎčηΞΔÎč στÎčς ÎĄÏ…ÎžÎŒÎčσΔÎčς "; + +/* tooltip, generic loading error */ +"Can't open the file" = "ΔΔΜ Î”ÎŻÎœÎ±Îč ÎŽÏ…ÎœÎ±Ï„Îź η Ï‡Î±ÏÏ„ÎżÎłÏÎŹÏ†Î·ÏƒÎ· Î±ÏÏ‡Î”ÎŻÎżÏ… στη ÎŒÎœÎźÎŒÎ·"; + +/* undo command name */ +"Cut" = "Î‘Ï€ÎżÎșÎżÏ€Î·"; + +/* tooltip */ +"File cannot be optimized any further" = "΀ο Î±ÏÏ‡Î”ÎŻÎż ΎΔΜ ÎŒÏ€ÎżÏÎ”ÎŻ Μα ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎčηΞΔί πΔραÎčτέρω"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "΀ο Î±ÏÏ‡Î”ÎŻÎż ΎΔΜ Î”ÎŻÎœÎ±Îč ÎżÏÏ„Î” PNG, GIF, ÎżÏÏ„Î” JPEG "; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "΀ο ImageOptim Ξα ÎșÎ»Î”ÎŻÏƒÎ”Îč όταΜ τΔλΔÎčώσΔÎč η ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·."; + +/* tooltip */ +"Inspecting file" = "ΕπÎčΞΔώρηση Î±ÏÏ‡Î”ÎŻÎżÏ…"; + +/* newly added to the queue */ +"New file" = "ÎÎ”Îż αρχΔÎčÎż"; + +/* status bar */ +"Lossy minification enabled" = "Η ÏƒÎŒÎŻÎșρυΜση ΌΔ απώλΔÎčΔς έχΔÎč Î”ÎœÎ”ÏÎłÎżÏ€ÎżÎčηΞΔί."; + +/* tooltip */ +"Optimized file could not be saved" = "΀ο ÎČΔλτÎčÏ‰ÎŒÎ”ÎœÎż αρχΔÎčÎż ΎΔΜ ÎŒÏ€ÎżÏÎ”ÏƒÎ” Μα Î±Ï€ÎżÎžÎ·ÎșΔυΞΔÎč"; + +/* tooltip */ +"Optimized successfully with %@" = "ΒΔλτÎčωση ΔπÎčτυχης ΌΔ %@"; + +/* tooltip */ +"Reverted to original" = "Î•Ï€Î±ÎœÎźÎ»ÎžÎ” στηΜ αρχÎčÎșÎź"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "ÎšÎ”ÏÎŽÎźÎžÎ·ÎșαΜ %1$@ από %2$@. %3$@ ÏƒÏ…ÎœÎżÎ»ÎčÎșÎŹ (έως %4$@ Î±ÎœÎŹ Î±ÏÏ‡Î”ÎŻÎż)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "ÎšÎ”ÏÎŽÎźÎžÎ·ÎșαΜ %1$@ από %2$@. %3$@ Î±ÎœÎŹ Î±ÏÏ‡Î”ÎŻÎż ÏƒÏ„Îż ÎŒÎ­ÏƒÎż ÏŒÏÎż (ΌέχρÎč %4$@)"; + +/* command name, tooltip */ +"Started %@" = "ΕΜαρΟη %@"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Î‘ÎœÎ±ÎŒÎżÎœÎź ÎłÎčα Μα ΟΔÎșÎčÎœÎźÏƒÎżÏ…Îœ ÎżÎč ÎČΔλτÎčωσΔÎčς"; + diff --git a/imageoptim/el.lproj/PrefsController.strings b/imageoptim/el.lproj/PrefsController.strings new file mode 100644 index 00000000..5e34906a --- /dev/null +++ b/imageoptim/el.lproj/PrefsController.strings @@ -0,0 +1,69 @@ + +/* Window title */ +"5.title" = "Î ÏÎżÏ„ÎčÎŒÎźÏƒÎ”Îčς"; + +/* The first prefs tab (misc/general) */ +"167.label" = "ΓΔΜÎčÎșές"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "΀αχύτητα ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚"; + +/* Tab quality (for lossy minification) */ +"177.label" = "ΠοÎčότητα"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Î•ÎłÎłÏÎ±Ï†Îź Î±ÏÏ‡Î”ÎŻÏ‰Îœ ÏƒÏ„Îż ÎŽÎŻÏƒÎșÎż"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "ΔÎčÎ±Ï„ÎźÏÎ·ÏƒÎ· ÎŽÎčÎșαÎčÏ‰ÎŒÎŹÏ„Ï‰Îœ Î±ÏÏ‡Î”ÎŻÏ‰Îœ, ÎčÎŽÎčÎżÏ„ÎźÏ„Ï‰Îœ ÎșαÎč hard συΜΎέσΌωΜ."; + +/* label in speed tab "Optimization level" */ +"818.title" = "Î•Ï€ÎŻÏ€Î”ÎŽÎż ÎČΔλτÎčÏƒÏ„ÎżÏ€ÎżÎŻÎ·ÏƒÎ·Ï‚"; + +/* "Fast" */ +"819.title" = "Î“ÏÎźÎłÎżÏÎ·"; + +/* "Insane" */ +"820.title" = "Î€ÏÎ”Î»ÎŹ"; + +/* "Normal" */ +"821.title" = "ÎšÎ±ÎœÎżÎœÎčÎșÎź"; + +/* "Extra" */ +"822.title" = "ΈΟτρα"; + +/* Checkbox in Preferences */ +"854.title" = "Î‘Ï†Î±ÎŻÏÎ”ÏƒÎ· ÎŒÎ”Ï„Î±ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÏ‰Îœ PNG (ÎłÎŹÎŒÎŒÎ±, χρωΌατÎčÎșό Ï€ÏÎżÏ†ÎŻÎ», Ï€ÏÎżÎ±ÎčρΔτÎčÎșÎŹ ÎșÎżÎŒÎŒÎŹÏ„Îčα)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "ΟÎč Ï†Ï…Î»Î»ÎżÎŒÎ”Ï„ÏÎ·Ï„Î­Ï‚ ÏƒÏ„Îż Web απαÎčÏ„ÎżÏÎœ Î±Ï†Î±ÎŻÏÎ”ÏƒÎ· στα ÎșÎżÎŒÎŒÎŹÏ„Îčα ÎłÎŹÎŒÎŒÎ±"; + +/* label "JPEG quality" */ +"868.title" = "JPEG Ï€ÎżÎčότητα"; + +/* Checkbox in Preferences */ +"911.title" = "Î‘Ï†Î±ÎŻÏÎ”ÏƒÎ· ÎŒÎ”Ï„Î±ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÏ‰Îœ JPEG (EXIF, χρωΌατÎčÎșώΜ Ï€ÏÎżÏ†ÎŻÎ», GPS, πΔρÎčÏƒÏ„ÏÎżÏ†Îź, Îșτλ.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "ÎœÎ”Ï„Î±ÎŽÎ”ÎŽÎżÎŒÎ­ÎœÎ± ÎșαÎč χρωΌατÎčÎșÎŹ Ï€ÏÎżÏ†ÎŻÎ»"; + +/* Header above list of tools to enable */ +"1107.title" = "Î•ÎœÎ”ÏÎłÎżÏ€ÎżÎŻÎ·ÏƒÎ·"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Η Î±Ï€ÎżÎžÎźÎșΔυση σΔ ÎŽÎčÎșτυαÎșÎżÏÏ‚ ÎŽÎŻÏƒÎșÎżÏ…Ï‚ Î”ÎŻÎœÎ±Îč ÎłÏÎ·ÎłÎżÏÏŒÏ„Î”ÏÎ· όταΜ ΎΔΜ ÎŽÎčÎ±Ï„Î·ÏÎżÏÎœÏ„Î±Îč τα ÎŽÎčÎșαÎčώΌατα"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "ΔΔΜ συΜÎčÏƒÏ„ÎŹÏ„Î±Îč Î”ÎŹÎœ χρΔÎčÎŹÎ¶Î”ÏƒÏ„Î” τÎčς ΔΜσωΌατωΌέΜΔς Ï€Î»Î·ÏÎżÏ†ÎżÏÎŻÎ”Ï‚ πΜΔυΌατÎčÎșώΜ ÎŽÎčÎșαÎčÏ‰ÎŒÎŹÏ„Ï‰Îœ"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF Ï€ÎżÎčότητα"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "ÎšÎŹÎœÎ”Îč τα Î±ÏÏ‡Î”ÎŻÎ± Ï€ÎżÎ»Ï ÎŒÎčÎșρότΔρα, αλλΏ ÎŒÏ€ÎżÏÎ”ÎŻ Μα Î±Î»Î»ÎŹÎŸÎ”Îč τηΜ Î”ÎŒÏ†ÎŹÎœÎčση τωΜ ΔÎčÎșόΜωΜ"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG Ï€ÎżÎčότητα"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Î•ÎœÎ”ÏÎłÎżÏ€ÎżÎčΔί τη ÏƒÎŒÎŻÎșρυΜση ΌΔ απώλΔÎčΔς"; diff --git a/imageoptim/en-GB.lproj/Help/Help.helpindex b/imageoptim/en-GB.lproj/Help/Help.helpindex deleted file mode 100644 index eeafab2f..00000000 Binary files a/imageoptim/en-GB.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/en-GB.lproj/Help/index.html b/imageoptim/en-GB.lproj/Help/index.html index 725624bd..8479971d 100644 --- a/imageoptim/en-GB.lproj/Help/index.html +++ b/imageoptim/en-GB.lproj/Help/index.html @@ -1,78 +1,64 @@ - - - + + - - - Codestin Search App - - - - - - + +Codestin Search App + + + + - - main - -

    ImageOptim

    +

    ImageOptim

    How to use

      -
    1. Drag'n'drop PNG or JPEG files or directories onto main table view in ImageOptim's window.
    2. +
    3. Drag'n'drop PNG or JPEG files or directories onto main table view in ImageOptim's window.
    4. Wait until it finishes.
    5. Profit! (from smaller files)
    - -

    You can also drop files onto ImageOptim's Dock icon.

    +

    You can also drop files onto ImageOptim's Dock icon.

    Learn how to change Preferences.

    Icons in file table

    - - + + - - - + + - - - + + - - - + + - - - + + -
    Green Checkmark
    Green Checkmark Image has been optimised successfully.
    Green X
    Green X Everything went fine, but image couldn't be optimised any further.
    Gray star
    Gray star Optimisation of this file is in progress.
    Gray dots
    Gray dots File is queued to be optimised after other files are finished.
    Orange exclamation mark
    Orange exclamation mark There was an error during optimisation. You'll find explanation by running Console.app.
    - -

    How does it work

    + +

    How does it work

    ImageOptim is a front-end (GUI) for these applications:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +66,10 @@

      How does it work

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • and optionally PNGOUT.
    - -

    ImageOptim runs them and automatically selects smallest file.

    +

    ImageOptim runs them and automatically selects smallest file.

    diff --git a/imageoptim/en-GB.lproj/Help/prefs.html b/imageoptim/en-GB.lproj/Help/prefs.html index 933a4b94..75e1e494 100644 --- a/imageoptim/en-GB.lproj/Help/prefs.html +++ b/imageoptim/en-GB.lproj/Help/prefs.html @@ -1,105 +1,77 @@ - - + + + + Codestin Search App - - - + + -general -

    ImageOptim Preferences

    -

    « Back to index

    -

    You shouldn't need to change any of these.

    -

    General preferences

    -
    -
    Preserve file permissions, attributes and hardlinks
    -
    -

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. -

    It's slightly faster not to preserve permissions. -

    -
    Backup original files before saving
    -

    Will write copy of a file with ~ appended to its name. This makes optimisation a bit slower and litters your disk with backup files.

    - -
    Remove optional chunks
    -

    Keep it on if you optimise for web. Disable if you have special PNGs with extra metadata.

    -
    Strip EXIF markers from files
    -

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. Metadata is never removed from JPEG files larger than 1.3MB.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimise JPEG files.

    - +

    ImageOptim Preferences

    +

    « Back to index

    +

    General preferences

    +
    +
    Preserve file permissions, attributes and hardlinks
    +
    +

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same.

    +

    It's slightly faster not to preserve permissions.

    +
    +
    Strip PNG metadata (gamma, color profiles, optional chunks)
    +
    +

    PNG files can have different brightness and saturation in different browsers, because not all browsers support gamma correction and color profiles features equally. Removal of this information makes PNG color more consistent across browsers and reduces file size.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    Strip JPEG metadata (EXIF, color profiles, GPS, rotation, etc.)
    +
    +

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimise PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimising special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    Maximum quality
    -

    If set to 100%, optimisation will be lossless.

    -

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    - -
    +
    +

    If set to 100%, optimisation will be lossless.

    +

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    +
    +
    -
    -pngout -

    PNGOUT

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimise PNG files using PNGOUT. -

    PNGOUT is not bundled with ImageOptim. It's a great tool, but and author of PNGOUT forbids redistribution of it, so you have to download PNGOUT yourself.

    - -
    -
    Optimisation type
    -

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    - -
    Interrupt if takes too long
    -

    PNGOUT may need a lot of time to optimise very large images. This option gracefully interrupts PNGOUT after 1 minute.

    -
    +
    +

    PNGOUT

    +
    +
    Optimisation type
    +
    +

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    +
    +
    Interrupt if takes too long
    +
    +

    PNGOUT may need a lot of time to optimise very large images. This option gracefully interrupts PNGOUT after 1 minute.

    +
    +
    -
    -advpng -

    AdvPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimise PNG files using AdvPNG tool.

    - -
    -
    Optimisation level
    -
    AdvPNG is relatively fast, so you can use maximum level.
    -
    -
    -
    -optipng -

    OptiPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimise PNG files using OptiPNG tool.

    - -
    -
    Optimisation level
    -

    Number of different setting combinations tested. It rarely makes sense to try them all.

    - -
    Make images interlaced (progressive)
    -

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    -

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    -
    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimise GIF files using Gifsicle. - -

    GIF files will be changed to interlaced or non-interlaced automatically, whichever is smaller. In-file comments will be removed.

    -

    Please note that Gifsicle works best with animated GIFs and non-animated GIFs rarely can be optimised

    - -

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    -
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    +
    +

    OxiPNG

    +
    +
    Optimisation level
    +
    +

    Number of different setting combinations tested. It rarely makes sense to try them all.

    +
    +
    Make images interlaced (progressive)
    +
    +

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    +

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    +
    +
    +
    +

    Gifsicle

    +

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    +
    + + diff --git a/imageoptim/en-GB.lproj/ImageOptim.strings b/imageoptim/en-GB.lproj/ImageOptim.strings new file mode 100644 index 00000000..69e159ba --- /dev/null +++ b/imageoptim/en-GB.lproj/ImageOptim.strings @@ -0,0 +1,30 @@ +/* Menu Item "Minimize" */ +"23.title" = "Minimise"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "List of files to optimise"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Size of file after optimisation"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Size of file after optimisation"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimisation status"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimisation status"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimise Again"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Run optimisations again"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimise Optimised"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Optimised Size"; + diff --git a/imageoptim/en-GB.lproj/Localizable.strings b/imageoptim/en-GB.lproj/Localizable.strings index a02e9f80..50b8af9f 100644 --- a/imageoptim/en-GB.lproj/Localizable.strings +++ b/imageoptim/en-GB.lproj/Localizable.strings @@ -1,6 +1,15 @@ +/* tooltip */ "File cannot be optimized any further" = "File cannot be optimised any further"; + +/* tooltip */ "Optimized file could not be saved" = "Optimised file could not be saved"; + +/* tooltip */ "Optimized successfully with %@" = "Optimised successfully with %@"; -"Size of optimized file is 0" = "Size of optimised file is 0"; + +/* tooltip */ "Waiting to be optimized" = "Waiting to be optimised"; + +/* tooltip */ "Waiting to start more optimizations" = "Waiting to start more optimisations"; + diff --git a/imageoptim/en-GB.lproj/MainMenu.xib b/imageoptim/en-GB.lproj/MainMenu.xib deleted file mode 100644 index b0f81961..00000000 --- a/imageoptim/en-GB.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Optimisation status - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - File - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Original Size - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Size - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Savings - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Best tool - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Drag and drop image files onto the area above - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Add - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{434, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{458, 6}, {71, 25}} - - YES - - 67239424 - 134217728 - Again - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Run optimisations again - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - About ImageOptim - - 2147483647 - - - - - - Check for Updates
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide ImageOptim - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - File - - - - Add Files
 - o - 1048576 - 2147483647 - - - - - - Optimise Again - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimise Optimised - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Close - w - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Delete - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - - - - Tools - - 2147483647 - - - submenuAction: - - Tools - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - - - Minimise - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Original Size - - 2147483647 - - - - - - Optimised Size - - 2147483647 - 1 - - - - - - Savings - - 2147483647 - 1 - - - - - - Best tool - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Help - - 1048576 - 2147483647 - - - submenuAction: - - Help - - - - ImageOptim Help - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - About ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 33556485 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - version - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Size - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - List of files to optimise - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimisation - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Add new files or directories - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimisation status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimisation - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/en-GB.lproj/PrefsController.strings b/imageoptim/en-GB.lproj/PrefsController.strings new file mode 100644 index 00000000..1e181cde --- /dev/null +++ b/imageoptim/en-GB.lproj/PrefsController.strings @@ -0,0 +1,6 @@ +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimisation level"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimisation level"; + diff --git a/imageoptim/en-GB.lproj/PrefsController.xib b/imageoptim/en-GB.lproj/PrefsController.xib deleted file mode 100644 index 18aa9afc..00000000 --- a/imageoptim/en-GB.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim Preferences - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Preserve file permissions, attributes and hardlinks - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Backup original files before saving - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Writing files to disk - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Remove all optional chunks - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Web browsers require gamma chunks to be removed - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Strip EXIF markers and comments from files - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Enable - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - General - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimisation type - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Simple - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Xtreme - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intense - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - Longest match - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Try various different filters - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Interrupt if takes too long to execute - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Make images interlaced (progressive) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Optimisation level - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Interlaced files are usually larger - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 trials - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 trials - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimisation level - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Fast - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Insane - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Maximum quality - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/en.lproj/Credits.html b/imageoptim/en.lproj/Credits.html new file mode 100644 index 00000000..a3f4d1b3 --- /dev/null +++ b/imageoptim/en.lproj/Credits.html @@ -0,0 +1,30 @@ +

    ImageOptim by Kornel LesiƄski and contributors is a GUI for 3rd party utilities:

    + +
    +

    +ImageOptim can be redistributed and modified under GNU General Public License version 2 or later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC. +

    diff --git a/imageoptim/en.lproj/Credits.rtf b/imageoptim/en.lproj/Credits.rtf deleted file mode 100644 index 0592e79a..00000000 --- a/imageoptim/en.lproj/Credits.rtf +++ /dev/null @@ -1,24 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 by Kornel Lesi\uc0\u324 ski and contributors is a GUI for 3rd party utilities:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} by Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} by Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} by Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} by Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} by Eddie Kohler,\ -{\listtext \'95 }and {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} by Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim can be redistributed and modified under {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License version 2 or later}}. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.} \ No newline at end of file diff --git a/imageoptim/en.lproj/Help/Help.helpindex b/imageoptim/en.lproj/Help/Help.helpindex deleted file mode 100644 index eeafab2f..00000000 Binary files a/imageoptim/en.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/en.lproj/Help/index.html b/imageoptim/en.lproj/Help/index.html index 3cfeff91..b4079fd5 100644 --- a/imageoptim/en.lproj/Help/index.html +++ b/imageoptim/en.lproj/Help/index.html @@ -1,90 +1,101 @@ - - - + + - - - Codestin Search App - - - - - - + +Codestin Search App + + + + - - main - -

    ImageOptim

    - -

    How to use

    - -
      -
    1. Drag'n'drop PNG or JPEG files or directories onto main table view in ImageOptim's window.
    2. - -
    3. Wait until it finishes.
    4. - -
    5. Profit! (from smaller files)
    6. -
    - -

    You can also drop files onto ImageOptim's Dock icon.

    - -

    Learn how to change Preferences.

    - -

    Icons in file table

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Green CheckmarkImage has been optimized successfully.
    Green XEverything went fine, but image couldn't be optimized any further.
    Gray starOptimization of this file is in progress.
    Gray dotsFile is queued to be optimized after other files are finished.
    Orange exclamation markThere was an error during optimization. You'll find explanation by running Console.app.
    - -

    How does it work

    - -

    ImageOptim is a front-end (GUI) for these applications:

    - -
      -
    • OptiPNG
    • - -
    • PNGCrush
    • - -
    • AdvPNG
    • - -
    • JpegOptim
    • - -
    • JpegTran
    • - -
    • and optionally PNGOUT.
    • -
    -

    ImageOptim runs them and automatically selects smallest file.

    - +

    + ImageOptim +

    +

    + How to use +

    +
      +
    1. Drag'n'drop PNG or JPEG files or directories onto main table view in ImageOptim's window. +
    2. +
    3. Wait until it finishes. +
    4. +
    5. Profit! (from smaller files) +
    6. +
    +

    + Files will be overwritten with smaller versions. Unoptimized versions will be moved to Trash. +

    +

    + You can also drop files onto ImageOptim's Dock icon. +

    +

    + Learn how to change Preferences. +

    +

    + Icons in file table +

    + + + + + + + + + + + + + + + + + + + + + +
    + Green Checkmark + + Image has been optimized successfully. +
    + Green X + + Everything went fine, but image couldn't be optimized any further. +
    + Gray star + + Optimization of this file is in progress. +
    + Gray dots + + File is queued to be optimized after other files are finished. +
    + Orange exclamation mark + + There was an error during optimization. You'll find explanation by running Console.app. +
    +

    + How does it work +

    +

    + ImageOptim is a front-end (GUI) for these applications: +

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • and PNGOUT.
    • +
    +

    + ImageOptim runs them and automatically selects the smallest file. +

    + diff --git a/imageoptim/en.lproj/Help/prefs.html b/imageoptim/en.lproj/Help/prefs.html index 7e217704..e6b16813 100644 --- a/imageoptim/en.lproj/Help/prefs.html +++ b/imageoptim/en.lproj/Help/prefs.html @@ -1,105 +1,89 @@ - - + + + + Codestin Search App - - - + + -general -

    ImageOptim Preferences

    -

    « Back to index

    -

    You shouldn't need to change any of these.

    -

    General preferences

    -
    -
    Preserve file permissions, attributes and hardlinks
    -
    -

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. -

    It's slightly faster not to preserve permissions. -

    -
    Backup original files before saving
    -

    Will write copy of a file with ~ appended to its name. This makes optimization a bit slower and litters your disk with backup files.

    - -
    Remove optional chunks
    -

    Keep it on if you optimize for web. Disable if you have special PNGs with extra metadata.

    -
    Strip EXIF markers from files
    -

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. Metadata is never removed from JPEG files larger than 1.3MB.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize JPEG files.

    - -
    Maximum quality
    -

    If set to 100%, optimization will be lossless.

    -

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    - -
    -
    -
    -pngout -

    PNGOUT

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using PNGOUT. -

    PNGOUT is not bundled with ImageOptim. It's a great tool, but and author of PNGOUT forbids redistribution of it, so you have to download PNGOUT yourself.

    - -
    -
    Optimization type
    -

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    - -
    Interrupt if takes too long
    -

    PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute.

    -
    -
    -
    -advpng -

    AdvPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using AdvPNG tool.

    - -
    -
    Optimization level
    -
    AdvPNG is relatively fast, so you can use maximum level.
    -
    -
    -
    -optipng -

    OptiPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using OptiPNG tool.

    - -
    -
    Optimization level
    -

    Number of different setting combinations tested. It rarely makes sense to try them all.

    - -
    Make images interlaced (progressive)
    -

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    -

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    -
    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize GIF files using Gifsicle. - -

    GIF files will be changed to interlaced or non-interlaced automatically, whichever is smaller. In-file comments will be removed.

    -

    Please note that Gifsicle works best with animated GIFs and non-animated GIFs rarely can be optimized

    - -

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    -
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    -
    +

    + ImageOptim Preferences +

    +

    + « Back to index +

    +

    + General preferences +

    +
    +
    + Strip PNG metadata (gamma, color profiles, optional chunks) +
    +
    +

    + PNG files can have different brightness and saturation in different browsers, because not all browsers support gamma correction and color profiles features equally. Removal of this information makes PNG color more consistent across browsers and reduces file size. +

    +

    + Other invisible information is removed as well, such as DPI and comments. +

    +
    +
    + Strip JPEG metadata (EXIF, color profiles, GPS, rotation, etc.) +
    +
    +

    + Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. +

    +

    + Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not. +

    +
    +
    + Preserve file permissions, attributes and hardlinks +
    +
    +

    + Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. +

    +

    + It's slightly faster not to preserve permissions. +

    +
    +
    +

    + Tools +

    +

    + Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression). +

    +

    + Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files). +

    +

    SVGO works only if you have Node.js installed using the official installer or Homebrew (nvm is not supported).

    +

    + Quality +

    +
    +
    + Lossy minification +
    +
    +

    + If lossy minification is off, optimization will be lossless. Pixels won't change and optimizations will only remove invisible metadata. This gives larger files, but is safe to run on any file any number of times. +

    +

    + If lossy minification is on, then images with quality higher than configured, will be converted to have lower quality. This usually gives images that still look good, and gives much much smaller files. +

    +
    +
    +

    + Optimization level +

    +

    At fastest level optimizations will take only few seconds per image. Fast setting is recommmended for MacBook Air and older Macs.

    +

    Slower levels compress a little better, but take much more time. Large PNG files may take several minutes to compress.

    +

    The slowest level is very very slow, even on the fastest Mac available.

    + + diff --git a/imageoptim/en.lproj/ImageOptim.strings b/imageoptim/en.lproj/ImageOptim.strings new file mode 100644 index 00000000..da84fa5f --- /dev/null +++ b/imageoptim/en.lproj/ImageOptim.strings @@ -0,0 +1 @@ +/* nothing */ diff --git a/imageoptim/en.lproj/InfoPlist.strings b/imageoptim/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..76fa7172 --- /dev/null +++ b/imageoptim/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +CFBundleDisplayName = "ImageOptim"; +CFBundleName = "ImageOptim"; diff --git a/imageoptim/en.lproj/MainMenu.xib b/imageoptim/en.lproj/MainMenu.xib deleted file mode 100644 index 110787ab..00000000 --- a/imageoptim/en.lproj/MainMenu.xib +++ /dev/null @@ -1,3525 +0,0 @@ - - - - 1070 - 12C60 - 3083 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 3083 - - - NSArrayController - NSButton - NSButtonCell - NSCustomObject - NSCustomView - NSImageCell - NSImageView - NSMenu - NSMenuItem - NSNumberFormatter - NSProgressIndicator - NSScrollView - NSScroller - NSTableColumn - NSTableHeaderView - NSTableView - NSTextField - NSTextFieldCell - NSTextView - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - - YES - NO - YES - - - 256 - {549, 17} - - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75497536 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 134217728 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Optimization status - - - filename - 345 - 100 - 1000 - - 75497536 - 2048 - File - - - 3 - MC4zMzMzMzI5OQA - - - - - 67108928 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75497536 - 67110912 - Original Size - - - - - - 67108928 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75497536 - 67110912 - Size - - - - - - 67108928 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75497536 - 67110912 - Savings - - - - - - 67108928 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75497536 - 2048 - Best tool - - - - - - 67108928 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - NO - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - - NO - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - - 4 - - - {{0, 39}, {549, 259}} - - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - 0.25 - 4 - 1 - - - - 292 - {{43, 12}, {410, 14}} - - - - YES - - 67108928 - 306321472 - Drag and drop image files onto the area above - - - - - NO - - - - 292 - {{8, 6}, {30, 25}} - - - - YES - - 67108864 - 134217728 - Add - - - -2030813184 - 35 - - NSImage - NSAddTemplate - - - - - NO - - - - 1313 - {{434, 11}, {16, 16}} - - - - 28938 - 100 - - - - 289 - {{458, 6}, {71, 25}} - - - - YES - - 67108864 - 134217728 - Again - - - -2034483200 - 268435491 - - NSImage - NSRefreshTemplate - - Run optimizations again - r - - NO - - - - 274 - {{0, 39}, {549, 258}} - - - - _NS:499 - DragDropImageView - - - {549, 297} - - - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - About ImageOptim - - 2147483647 - - - - - - Check for Updates
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide ImageOptim - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - File - - - - Add Files
 - o - 1048576 - 2147483647 - - - - - - Optimize Again - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Close - w - 1048576 - 2147483647 - - - - - - - - - Edit - - 1048576 - 2147483647 - - - submenuAction: - - Edit - - - - Undo - z - 1048576 - 2147483647 - - - - - - Redo - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cut - x - 1048576 - 2147483647 - - - - - - Copy - c - 1048576 - 2147483647 - - - - - - Paste - v - 1048576 - 2147483647 - - - - - - Delete - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Select All - a - 1048576 - 2147483647 - - - - - - - - - Tools - - 2147483647 - - - submenuAction: - - Tools - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Original Size - - 2147483647 - - - - - - Optimized Size - - 2147483647 - 1 - - - - - - Savings - - 2147483647 - 1 - - - - - - Best tool - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Help - - 1048576 - 2147483647 - - - submenuAction: - - Help - - - - ImageOptim Help - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - About ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - - YES - - 134217728 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - NO - - - - 4370 - - - - 2304 - - - - 2322 - {284, 228} - - - - - - - - - - - - - - - 38 - - - - 284 - 1 - - - 2053 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - - - - {295, 228} - - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - - NO - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - - NO - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - 0.25 - 4 - 1 - - - - 265 - {{166, 243}, {87, 14}} - - - - YES - - 70254657 - 4363264 - version - - - - - NO - - - {295, 370} - - - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75497536 - 67110912 - Size - - - 3 - MC4zMzMzMzI5OQA - - - - - 337641536 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - List of files to optimize - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Add new files or directories - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSNumberFormatter - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - savingsFormatter - NSNumberFormatter - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/en.lproj/PrefsController.strings b/imageoptim/en.lproj/PrefsController.strings new file mode 100644 index 00000000..da84fa5f --- /dev/null +++ b/imageoptim/en.lproj/PrefsController.strings @@ -0,0 +1 @@ +/* nothing */ diff --git a/imageoptim/en.lproj/PrefsController.xib b/imageoptim/en.lproj/PrefsController.xib deleted file mode 100644 index 66e4d1d9..00000000 --- a/imageoptim/en.lproj/PrefsController.xib +++ /dev/null @@ -1,3234 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim Preferences - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Preserve file permissions, attributes and hardlinks - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Backup original files before saving - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Writing files to disk - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Remove all optional chunks - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Web browsers require gamma chunks to be removed - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Strip EXIF markers and comments from files - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Enable - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - General - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimization type - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Simple - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Xtreme - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intense - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - Longest match - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Try various different filters - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Interrupt if takes too long to execute - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Make images interlaced (progressive) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Optimization level - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Interlaced files are usually larger - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 trials - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 trials - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimization level - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Fast - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Insane - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Maximum quality - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/err.png b/imageoptim/err.png index 164173b1..866e7734 100644 Binary files a/imageoptim/err.png and b/imageoptim/err.png differ diff --git a/imageoptim/err@2x.png b/imageoptim/err@2x.png new file mode 100644 index 00000000..061c4e89 Binary files /dev/null and b/imageoptim/err@2x.png differ diff --git a/imageoptim/es.lproj/Credits.html b/imageoptim/es.lproj/Credits.html new file mode 100644 index 00000000..f6ca1a3f --- /dev/null +++ b/imageoptim/es.lproj/Credits.html @@ -0,0 +1,31 @@ +
    +

    ImageOptim de Kornel LesiƄski es un GUI para las siguientes herramientas de terceros:

    + +

    ImageOptim puede ser redistribuido y modificado bajo +GNU General Public License versiĂłn 2 o posterior. +El PNGOUT empaquetado no estĂĄ cubierto por la GPL y ha sido incluido con permiso de Ardfry Imaging, LLC.

    +

    Traducido por Benjamin Pollard Nelson, Wayne Hartman y Sendoa Portuondo.

    +
    diff --git a/imageoptim/es.lproj/Credits.rtf b/imageoptim/es.lproj/Credits.rtf deleted file mode 100644 index aa8cf3a9..00000000 --- a/imageoptim/es.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf340 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 de Kornel Lesi\uc0\u324 ski es un GUI para las siguientes herramientas de terceros:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} de Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} de Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} de Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} de Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} de Eddie Kohler,\ -{\listtext \'95 }y {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} de Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim puede ser redistribuido y modificado bajo {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License versi\'f3n 2 o posterior}}. El PNGOUT empaquetado -\b no -\b0 est\'e1 cubierto por la GPL y ha sido incluido con permiso de Ardfry Imaging, LLC.\ -Traducido por Benjamin Pollard Nelson, Wayne Hartman y Sendoa Portuondo.} \ No newline at end of file diff --git a/imageoptim/es.lproj/Help/Help.helpindex b/imageoptim/es.lproj/Help/Help.helpindex deleted file mode 100644 index 5f20d72a..00000000 Binary files a/imageoptim/es.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/es.lproj/Help/index.html b/imageoptim/es.lproj/Help/index.html index 149e95f8..a8ca9eb7 100644 --- a/imageoptim/es.lproj/Help/index.html +++ b/imageoptim/es.lproj/Help/index.html @@ -1,90 +1,73 @@ - - - + + - + +Codestin Search App + + + - Codestin Search App - - - - - - - + - main - -

    ImageOptim

    +

    ImageOptim

    Modo de uso

      -
    1. Arrastre y suelte archivos JPEG o PNG o carpetas en la tabla de la ventana principal de ImageOptim.
    2. +
    3. Arrastre y suelte archivos JPEG o PNG o carpetas en la tabla de la ventana principal de ImageOptim.
    4. Espere hasta que termine.
    5. ¥Aprovechese de los archivos mås pequeños!
    - -

    También puede soltar archivos encima del icono de ImageOptim en el Dock.

    +

    También puede soltar archivos encima del icono de ImageOptim en el Dock.

    Aprenda a cambiar las Preferencias.

    Los iconos de la tabla de archivos

    - - + + - - - + + - - - + + - - - + + - - - + + -
    Visto verde
    Visto verde La imagen ha sido optimizada con éxito.
    X Verde
    X Verde Todo saliĂł bien, pero la imagen ya no pudo ser mejor optimizada.
    Estrella gris
    Estrella gris La optimizaciĂłn del archivo estĂĄ en curso.
    Puntos grises
    Puntos grises El archivo ha sido añadido a la cola para ser optimizado después de que otros archivos estén acabados.
    Signo de exclamaciĂłn naranja
    Signo de exclamaciĂłn naranja Hubo un error durante la optimizaciĂłn. EncontrarĂĄ una explicaciĂłn mediante la ejecuciĂłn de Console.app.
    - -

    CĂłmo funciona

    - -

    ImageOptim es un front-end (GUI) para estas aplicaciones:

    - -
      -
    • OptiPNG
    • - -
    • PNGCrush
    • - -
    • AdvPNG
    • - -
    • JpegOptim
    • - -
    • JpegTran
    • - -
    • y opcionalmente PNGOUT.
    • -
    - -

    ImageOptim ejecuta dichas aplicaciones y selecciona automåticamente el archivo mås pequeño.

    - + +

    CĂłmo funciona

    + +

    ImageOptim es un front-end (GUI) para estas aplicaciones:

    +

    OxiPNG

    +
      +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • MozJPEG
    • +
    • y opcionalmente PNGOUT.
    • +
    • ImageOptim ejecuta dichas aplicaciones y selecciona automĂĄticamente el archivo mĂĄs pequeño.
    • +
    • MozJPEG
    • +
    • y PNGOUT.
    • +
    +

    ImageOptim los ejecuta y escoge automåticamente el archivo mås pequeño.

    + diff --git a/imageoptim/es.lproj/Help/prefs.html b/imageoptim/es.lproj/Help/prefs.html index 1bcaff00..0b6915d3 100644 --- a/imageoptim/es.lproj/Help/prefs.html +++ b/imageoptim/es.lproj/Help/prefs.html @@ -1,111 +1,78 @@ - - + + + + Codestin Search App - - - - - -general -

    Preferencias de ImageOptim

    -

    « Volver al índice

    -

    No es necesario cambiar ninguna estas.

    -

    Preferencias generales

    -
    -
    Preservar permisos de los archivos, atributos o fĂ­sicos y hardlinks
    -
    -

    En lugar de borrar los archivos fuente y escribir uno nuevo con el mismo nombre, simplemente se cambia el contenido del archivo original en su lugar. Esto asegura que todos los enlaces duros (hardlinks), alias, propiedades de los archivos, permisos, atributos extendidos del archivo serĂĄn los mismos. -

    Es un poco mĂĄs rĂĄpido no preservar los permisos. -

    -
    Copia de seguridad de los archivos originales antes de guardar
    -

    EscribirĂĄ una copia del archivo con ~ anexado a su nombre. Esto hace que la optimizaciĂłn sea un poco mĂĄs lenta y llena su disco duro con archivos de esas copias de seguridad.

    - -
    Eliminar fragmentos opcionales
    -

    Manténgalo en caso de que quiera optimizar los archivos de imagen para la web. Desactivalo si tiene PNGs especiales con metadatos adicionales.

    -
    Elimina marcadores EXIF de los archivos
    -

    Elimina los metadatos de la imagen, como el nombre de la aplicaciĂłn o del modelo de cĂĄmara que creĂł el archivo.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Activado
    -

    Cuando esta activado, ImageOptim tratarĂĄ de optimizar los archivos JPEG.

    + + + +

    Preferencias de ImageOptim

    +

    « Volver al índice

    +

    Preferencias generales

    +
    +
    Preservar permisos de los archivos, atributos o fĂ­sicos y hardlinks
    +
    +

    En lugar de borrar los archivos originales y escribir uno nuevo con el mismo nombre, simplemente cambia el contenido del archivo original en su lugar. Esto asegura que todos los enlaces duros (hardlinks), alias, propiedades de los archivos, permisos, atributos extendidos del archivo serĂĄn los mismos.

    +

    Es un poco mĂĄs rĂĄpido no preservar los permisos.

    +
    +
    Eliminar fragmentos opcionales
    +
    +

    Los archivos PNG pueden tener diferente brillo y saturación en distintos navegadores, porque no todos los navegadores admiten características de perfiles de color y corrección de gamma del mismo modo. Eliminar esta información hace el color del PNG mås consistente en distintos navegadores y reduce el tamaño del archivo.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    Elimina marcadores EXIF de los archivos
    +
    +

    Elimina los metadatos de la imagen, como el nombre de la aplicaciĂłn o del modelo de cĂĄmara que creĂł el archivo.

    +

    La información de copyright incrustada se elimina también. Por favor, tenga en cuenta que generalmente las imågenes estån protegidas por leyes de propiedad intelectual, independientemente de que éstas contengan o no metadatos invisibles.

    +
    +
    +

    Herramientas

    +

    Zopfli y PNGOUT son compresores de PNG muy buenos, pero muy lentos. DeshabilĂ­talos si necesitas optimizar archivos PNG con rapidez (deja sĂłlo AdvPNG para una compresiĂłn mĂĄs rĂĄpida y todavĂ­a buena).

    +

    Zopfli y OptiPNG eliminarĂĄn valores RGB de los pĂ­xeles transparentes (conocidos como "alfa sucio"). Deshabilita estas dos herramientas si estĂĄs optimizando archivos especiales que utilizan canales alfa para algo distinto a la transparencia (ej. mapas de altura en archivos de datos de juego)

    +
    +

    JPEGOptim

    +
    Calidad mĂĄxima
    -

    Si se establece en 100%, la optimización serå sin pérdidas.

    -

    Cualquier valor por debajo de 100% harĂĄ que la calidad de los archivos sea menorsi es que parecen haber sido guardados con ajustes de alta calidad.

    - -
    +
    +

    Si se establece en 100%, la optimización serå sin pérdidas.

    +

    Cualquier valor por debajo de 100% harĂĄ que la calidad de los archivos sea menorsi es que parecen haber sido guardados con ajustes de alta calidad.

    +
    +
    -
    -pngout -

    PNGOUT

    -
    -
    Activado
    -

    Cuando esta activado, ImageOptim tratarĂĄ de optimizar los archivos PNG mediante PNGOUT. -

    PNGOUT no esta incluido con ImageOptim. Es una gran herramienta, pero el autor de PNGOUT prohĂ­be su redistribuciĂłn, por lo que usted mismo tiene que descargar PNGOUT.

    - - -
    -
    Tipo de optimizaciĂłn
    -

    PNGOUT es muy eficaz, pero muy lento. Use un nivel inferior si eres impaciente.

    - -
    Interrumpir si tarda demasiado
    -

    PNGOUT puede necesitar mucho tiempo para optimizar imågenes muy grandes. Esta opción interrumpe PNGOUT de manera controlada después de 1 minuto.

    - -
    +
    +

    PNGOUT

    +
    +
    Tipo de optimizaciĂłn
    +
    +

    PNGOUT es muy eficaz, pero muy lento. Use un nivel inferior si eres impaciente.

    +
    +
    Interrumpir si tarda demasiado
    +
    +

    PNGOUT puede necesitar mucho tiempo para optimizar imågenes muy grandes. Esta opción interrumpe PNGOUT de manera controlada después de 1 minuto.

    +
    +
    -
    -advpng -

    AdvPNG

    -
    -
    Activado
    -

    Cuando esta activado, ImageOptim tratarĂĄ de optimizar los archivos PNG mediante la herramienta AdvPNG.

    - - -
    -
    Nivel de optimizaciĂłn
    -
    AdvPNG es relativamente rĂĄpido, asĂ­ que puede utilizar el nivel mĂĄximo si asi lo desea.
    -
    -
    -
    -optipng -

    OptiPNG

    -
    -
    Activado
    -

    Cuando esta activado, ImageOptim tratarĂĄ de optimizar los archivos PNG mediante la herramienta OptiPNG.

    - - -
    -
    Nivel de optimizaciĂłn
    -

    Hemos probado numerosas combinaciones diferentes de ajustes. Rara vez tiene sentido probarlas todas.

    - -
    Entrelazar las imĂĄgenes (progresivo)
    -

    Las imĂĄgenes entrelazadas se ven mejor cuando estĂĄn parcialmente cargadas, pero por lo general entrelazarlas hace que la compresiĂłn sea menos eficiente.

    -

    Esta casilla tiene tres estados: si se activa, se forzarå en entrelazado de las imågenes. Cuando estå mezclado, mantendrå sin cambios el entrelazado del archivo, y cuando esté desactivado eliminarå el entrelazado de los archivos.

    -
    -
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan es un script basado en jpegtran. Se encarga de crear archivos JPEG con un inusual nĂșmero de escaneos progresivos para obtener una mejor compresiĂłn. El problema es que los archivos obtenidos pueden no ser comparibles con todos los navegadores.

    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Activado
    -

    Cuando esta activado, ImageOptim tratarĂĄ de optimizar los archivos GIF mediante Gifsicle. - - -

    Los archivos GIF pasarĂĄn a ser entrelazados o no entrelazados de forma automĂĄtica, segĂșn lo que sea mĂĄs pequeño. Los comentarios en el archivo serĂĄn eliminados.

    -

    Por favor tenga en cuenta que Gifsicle funciona mejor con GIFs animados. Los GIFs no animados raramente se pueden optimizar

    - -

    Para la mejor compresiĂłn, recomendamos convertir los archivos GIF a PNG (ImageOptim no lo hace automĂĄticamente).

    +
    +

    OxiPNG

    +
    +
    Nivel de optimizaciĂłn
    +
    +

    Hemos probado numerosas combinaciones diferentes de ajustes. Rara vez tiene sentido probarlas todas.

    +
    +
    Entrelaza las imĂĄgenes (progresivo)
    +
    +

    Las imĂĄgenes entrelazadas se ven mejor cuando estĂĄn parcialmente cargadas, pero por lo general entrelazarlas hace que la compresiĂłn sea menos eficiente.

    +

    Esta casilla tiene tres estados: si se activa, se forzarå en entrelazado de las imågenes. Cuando estå mezclado, mantendrå sin cambios el entrelazado del archivo, y cuando esté desactivado eliminarå el entrelazado de los archivos.

    +
    +
    +
    +

    Gifsicle

    +

    Para la mejor compresiĂłn, recomendamos convertir los archivos GIF a PNG (ImageOptim no lo hace automĂĄticamente).

    +
    + + diff --git a/imageoptim/es.lproj/ImageOptim.strings b/imageoptim/es.lproj/ImageOptim.strings new file mode 100644 index 00000000..fb1b4709 --- /dev/null +++ b/imageoptim/es.lproj/ImageOptim.strings @@ -0,0 +1,189 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Traer todo al frente"; + +/* Menu Item "Window" */ +"19.title" = "Ventana"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Ventana"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "MenĂș principal"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Servicios"; + +/* Menu Item "Services" */ +"131.title" = "Servicios"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Ocultar ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Salir de ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Ocultar Others"; + +/* Menu Item "Show All" */ +"150.title" = "Mostrar todo"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lista de archivos para optimizar"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Archivo"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Tamaño"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Tamaño del archivo despuĂ©s de la optimizaciĂłn"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Tamaño del archivo tras la optimizaciĂłn"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "ReducciĂłn"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Estado"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Acerca de ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Preferencias
"; + +/* Menu Item "Edit" */ +"375.title" = "EdiciĂłn"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "EdiciĂłn"; + +/* Menu Item "Select All" */ +"377.title" = "Seleccionar todo"; + +/* Menu Item "Undo" */ +"378.title" = "Deshacer"; + +/* Menu Item "Redo" */ +"384.title" = "Rehacer"; + +/* Menu Item "Cut" */ +"398.title" = "Cortar"; + +/* Menu Item "Copy" */ +"399.title" = "Copiar"; + +/* Menu Item "Paste" */ +"400.title" = "Pegar"; + +/* Menu Item "Delete" */ +"402.title" = "Eliminar"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Añadir nuevos archivos o directorios"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Añadir"; + +/* Menu Item "File" */ +"429.title" = "Archivo"; + +/* Top-level Main Menu "File" */ +"430.title" = "Archivo"; + +/* Menu Item "Add Files
" */ +"437.title" = "Añadir archivos
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Estado de optimizaciĂłn"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Cerrar"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Ayuda"; + +/* Menu Item "Help" */ +"504.title" = "Ayuda"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Ayuda ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Acerca de ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimizar de nuevo"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Buscar actualizaciones
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Arrastre y suelte archivos de imĂĄgenes aquĂ­ encima"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Ejecutar optimizaciones de nuevo"; + +/* Button "Again" */ +"635.title" = "Repetir"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Estado"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "versiĂłn"; + +/* TextFieldCell "version" */ +"646.title" = "versiĂłn"; + +/* Menu Item "Tools" */ +"655.title" = "Herramientas"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Herramientas"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Tamaño"; + +/* Menu Item "Savings" */ +"741.title" = "Ahorros"; + +/* Menu Item "Best tool" */ +"747.title" = "Herramientas"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Herramientas"; + +/* Menu Item "Original Size" */ +"791.title" = "Tamaño (original)"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Tamaño (original)"; + + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Restaurar al original"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Calidad: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Detener"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Copiar Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Mostrar en el Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "MinificaciĂłn con pĂ©rdidas"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Mostrar en el Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Estado"; diff --git a/imageoptim/es.lproj/Localizable.strings b/imageoptim/es.lproj/Localizable.strings index 8f6cc225..2dd48506 100644 --- a/imageoptim/es.lproj/Localizable.strings +++ b/imageoptim/es.lproj/Localizable.strings @@ -1,14 +1,57 @@ +/* tooltip */ +"%@ failed to start" = "%@ no se pudo iniciar"; + +/* undo command name */ +"Add" = "Añadir"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Todas las herramientas necesarias han sido desactivadas en las Preferencias"; -"Can't map file into memory" = "No se puede mapear el archivo en la memoria"; + +/* tooltip, generic loading error */ +"Can't open the file" = "No se puede mapear el archivo en la memoria"; + +/* undo command name */ +"Cut" = "Cortar"; + +/* tooltip */ "File cannot be optimized any further" = "El archivo no se puede optimizar mĂĄs"; + +/* tooltip */ "File is neither PNG, GIF nor JPEG" = "El archivo no es ni PNG ni JPG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim se cerrarĂĄ cuando las optimizaciones se hayan completado"; + +/* tooltip */ "Inspecting file" = "Inspeccionando archivo"; + +/* kilobytes suffix */ +"KB" = "KO"; + +/* newly added to the queue */ "New file" = "Nuevo archivo"; + +/* status bar */ +"Lossy minification enabled" = "MinificaciĂłn con pĂ©rdidas activada"; + +/* tooltip */ "Optimized file could not be saved" = "El archivo optimizado no se pudo guardar"; + +/* tooltip */ "Optimized successfully with %@" = "Optimizado con Ă©xito usando %@"; -"Size of optimized file is 0" = "El tamaño del archivo optimizado es O"; + +/* tooltip */ +"Reverted to original" = "Restaurado al original"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Ahorrados %1$@ de %2$@. Total %3$@ (hasta %4$@ por archivo)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Ahorrados %1$@ de %2$@. %3$@ por archivo en promedio (hasta %4$@)"; + +/* command name, tooltip */ "Started %@" = "Iniciado %@"; -"Waiting in queue" = "Esperando en la cola"; -"Waiting to be optimized" = "Esperando para ser optimizado"; -"Waiting to start more optimizations" = "A la espera de iniciar mĂĄs optimizaciones"; -"%@ failed to start" = "%@ no se pudo iniciar"; \ No newline at end of file + +/* tooltip */ +"Waiting to be optimized" = "A la espera de iniciar mĂĄs optimizaciones"; + diff --git a/imageoptim/es.lproj/MainMenu.xib b/imageoptim/es.lproj/MainMenu.xib deleted file mode 100644 index a60a6e46..00000000 --- a/imageoptim/es.lproj/MainMenu.xib +++ /dev/null @@ -1,3495 +0,0 @@ - - - - 1060 - 12C60 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 3084 - - - NSArrayController - NSButton - NSButtonCell - NSCustomObject - NSCustomView - NSImageCell - NSImageView - NSMenu - NSMenuItem - NSNumberFormatter - NSProgressIndicator - NSScrollView - NSScroller - NSTableColumn - NSTableHeaderView - NSTableView - NSTextField - NSTextFieldCell - NSTextView - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - - YES - NO - YES - - - 256 - {549, 17} - - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75497536 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 134217728 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Estado de optimizaciĂłn - - - filename - 345 - 100 - 1000 - - 75497536 - 2048 - Archivo - - - 3 - MC4zMzMzMzI5OQA - - - - - 67108928 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75497536 - 67110912 - Tamaño (original) - - - - - - 67108928 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - , - . - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75497536 - 67110912 - Tamaño - - - - - - 67108928 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - , - . - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75497536 - 67110912 - ReducciĂłn - - - - - - 67108928 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - , - . - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75497536 - 2048 - Herramientas - - - - - - 67108928 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - NO - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - - NO - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - - 4 - - - {{0, 39}, {549, 259}} - - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - 0.25 - 4 - 1 - - - - 292 - {{43, 12}, {410, 14}} - - - - YES - - 67108928 - 306321472 - Arrastre y suelte archivos de imĂĄgenes aquĂ­ encima - - - - - NO - - - - 292 - {{8, 6}, {30, 25}} - - - - YES - - 67108864 - 134217728 - Añadir - - - -2030813184 - 35 - - NSImage - NSAddTemplate - - - - - NO - - - - 1313 - {{413, 11}, {16, 16}} - - - - 28938 - 100 - - - - 289 - {{437, 6}, {92, 25}} - - - - YES - - 67108864 - 134217728 - Repetir - - - -2034483200 - 268435491 - - NSImage - NSRefreshTemplate - - Ejecutar optimizaciones de nuevo - r - - NO - - - - 274 - {{0, 39}, {549, 258}} - - - - _NS:499 - DragDropImageView - - - {549, 297} - - - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MenĂș principal - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Acerca de ImageOptim - - 2147483647 - - - - - - Buscar actualizaciones
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferencias
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Servicios - - 1048576 - 2147483647 - - - submenuAction: - - Servicios - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Ocultar ImageOptim - h - 1048576 - 2147483647 - - - - - - Ocultar Others - h - 1572864 - 2147483647 - - - - - - Mostrar todo - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Salir de ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Archivo - - 1048576 - 2147483647 - - - submenuAction: - - Archivo - - - - Añadir archivos
 - o - 1048576 - 2147483647 - - - - - - Optimizar de nuevo - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cerrar - w - 1048576 - 2147483647 - - - - - - - - - EdiciĂłn - - 1048576 - 2147483647 - - - submenuAction: - - EdiciĂłn - - - - Deshacer - z - 1048576 - 2147483647 - - - - - - Rehacer - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cortar - x - 1048576 - 2147483647 - - - - - - Copiar - c - 1048576 - 2147483647 - - - - - - Pegar - v - 1048576 - 2147483647 - - - - - - Eliminar - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Seleccionar todo - a - 1048576 - 2147483647 - - - - - - - - - Herramientas - - 2147483647 - - - submenuAction: - - Herramientas - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Ventana - - 1048576 - 2147483647 - - - submenuAction: - - Ventana - - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Traer todo al frente - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Tamaño (original) - - 2147483647 - - - - - - Tamaño - - 2147483647 - 1 - - - - - - Ahorros - - 2147483647 - 1 - - - - - - Herramientas - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Ayuda - - 1048576 - 2147483647 - - - submenuAction: - - Ayuda - - - - Ayuda ImageOptim - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Acerca de ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - - YES - - 134217728 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - NO - - - - 4370 - - - - 2304 - - - - 2322 - {284, 228} - - - - - - - - - - - - - - - 38 - - - - 284 - 1 - - - 2053 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - - - - {295, 228} - - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - - NO - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - - NO - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - 0.25 - 4 - 1 - - - - 265 - {{166, 243}, {87, 14}} - - - - YES - - 70254657 - 4363264 - versiĂłn - - - - - NO - - - {295, 370} - - - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75497536 - 67110912 - Tamaño - - - 3 - MC4zMzMzMzI5OQA - - - - - 337641536 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - , - . - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Lista de archivos para optimizar - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Tamaño del archivo tras la optimizaciĂłn - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Añadir nuevos archivos o directorios - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Estado - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSNumberFormatter - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - savingsFormatter - NSNumberFormatter - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/es.lproj/PrefsController.strings b/imageoptim/es.lproj/PrefsController.strings new file mode 100644 index 00000000..2aaf2f84 --- /dev/null +++ b/imageoptim/es.lproj/PrefsController.strings @@ -0,0 +1,60 @@ +/* Window title */ +"5.title" = "Preferencias de ImageOptim"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Velocidad optimizaciĂłn"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Calidad"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Al guardar archivos al disco"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Conservar permisos de archivos, atributos y hardlinks"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Nivel de optimizaciĂłn"; + +/* "Fast" */ +"819.title" = "RĂĄpido"; + +/* "Insane" */ +"820.title" = "Demente"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: Eliminar todos los fragmentos opcionales"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Los navegadores web requieren la eliminaciĂłn de fragmentos gamma"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: calidad"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: Eliminar marcadores EXIF y comentarios de los archivos"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata"; + +/* Header above list of tools to enable */ +"1107.title" = "Activado"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Guardar en unidades de red es mĂĄs rĂĄpido cuando los permisos no se conservan"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "No recomendado si necesita mantener incrustrada informaciĂłn de copyright"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "Calidad GIF"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Reduce el tamaño de los archivos, pero puede afectar su aspecto"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: calidad"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Activar minificaciĂłn con pĂ©rdidas"; + diff --git a/imageoptim/es.lproj/PrefsController.xib b/imageoptim/es.lproj/PrefsController.xib deleted file mode 100644 index d33006bd..00000000 --- a/imageoptim/es.lproj/PrefsController.xib +++ /dev/null @@ -1,3300 +0,0 @@ - - - - 1060 - 12C60 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 3084 - - - NSArrayController - NSBox - NSButton - NSButtonCell - NSCustomObject - NSNumberFormatter - NSSlider - NSSliderCell - NSTabView - NSTabViewItem - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - Preferencias de ImageOptim - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - - YES - - -2080374784 - 0 - Preservar permisos de archivos, atributos y hardlinks - - LucidaGrande - 13 - 1044 - - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - NO - - - - 268 - {{15, 11}, {400, 18}} - - - - YES - - 67108864 - 0 - Backup de los archivos originales antes de guardar - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{2, 2}, {434, 58}} - - - - - - {{159, 176}, {438, 75}} - - - - {0, 0} - - 67108864 - 0 - Al guardar archivos al disco - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - - 1 - YES - - 67108864 - 134217728 - - - - 1 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - - YES - - -2080374784 - 0 - Eliminar todos los fragmentos opcionales - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 264 - {{36, 14}, {385, 14}} - - - - YES - - 67108864 - 4194304 - Los navegadores web requieren la eliminaciĂłn de fragmentos gamma - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - NO - - - {{1, 1}, {436, 60}} - - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - - _NS:18 - {0, 0} - - 67108864 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - - YES - - -2080374784 - 0 - Eliminar marcadores EXIF y comentarios de los archivos - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{1, 1}, {436, 38}} - - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - - _NS:18 - {0, 0} - - 67108864 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - - YES - - -2080374784 - 0 - Gifsicle - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 171}, {110, 18}} - - - - YES - - -2080374784 - 0 - PNGOUT - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 151}, {110, 18}} - - - - YES - - -2080374784 - 0 - PNGCrush - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 131}, {110, 18}} - - - - YES - - -2080374784 - 0 - OptiPNG - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 111}, {110, 18}} - - - - YES - - -2080374784 - 0 - AdvPNG - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 82}, {110, 18}} - - - - YES - - -2080374784 - 0 - JPEGOptim - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 62}, {110, 18}} - - - - YES - - -2080374784 - 0 - Jpegtran - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 42}, {110, 18}} - - - - YES - - -2080374784 - 0 - Jpegrescan - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{1, 1}, {138, 197}} - - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - - _NS:9 - {0, 0} - - 67108864 - 0 - Activado - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - - General - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67108864 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - NO - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67108864 - 71303168 - Tipo de optimizaciĂłn - - - - - - NO - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67108864 - 272629760 - Simple - - LucidaGrande - 9 - 3614 - - - - - - NO - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67108864 - 71303168 - Xtreme - - - - - - NO - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67108864 - 138412032 - Intenso - - - - - - NO - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67108864 - 138412032 - Coincidencia mĂĄs larga - - - - - - NO - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67108864 - 0 - Pruebe varios filtros diferentes - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67108864 - 134217728 - - - - 6 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080374784 - 0 - Interrumpir si tarda demasiado en ejecutarse - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{165, 130}, {488, 18}} - - - YES - - 67108864 - 16777216 - Entrelazar las imĂĄgenes (progresivo) - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{2, 162}, {151, 51}} - - - YES - - 67108864 - 71303168 - Nivel de optimizaciĂłn - - - - - - NO - - - - 268 - {{184, 111}, {470, 13}} - - - YES - - 67108864 - 272629760 - Los archivos entrelazados suelen ser mĂĄs grandes - - LucidaGrande - 10 - 2843 - - - - - - NO - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67108864 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - NO - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67108864 - 272629760 - 24 pruebas - - - - - - NO - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67108864 - 71303168 - 240 pruebas - - - - - - NO - - - {243, 62} - - - - - {{163, 162}, {243, 62}} - - - {0, 0} - - 67108864 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67108864 - 134217728 - - - - 4 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{150, 185}, {231, 25}} - - - YES - - 67108864 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - NO - - - - 268 - {{2, 166}, {145, 47}} - - - YES - - 67108864 - 71303168 - Nivel de optimizaciĂłn - - - - - - NO - - - - 268 - {{149, 166}, {79, 11}} - - - YES - - 67108864 - 272629760 - RĂĄpido - - - - - - NO - - - - 268 - {{306, 166}, {76, 11}} - - - YES - - 67108864 - 71303168 - Demente - - - - - - NO - - - - 268 - {{194, 166}, {75, 11}} - - - YES - - 67108864 - 138412032 - Normal - - - - - - NO - - - - 268 - {{268, 166}, {66, 11}} - - - YES - - 67108864 - 138412032 - Extra - - - - - - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67108864 - 134217728 - - - - 3 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67108864 - 71303168 - Calidad mĂĄxima - - - - - - NO - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67108864 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - , - - . - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - , - . - NO - YES - YES - - - - - - NO - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67371264 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - NO - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67108864 - 272629760 - 80% - - - - - - NO - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67108864 - 71303168 - 100% - - - - - - NO - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67108864 - 138412032 - 90% - - - - - - NO - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67108864 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67108864 - 134217728 - - - - 2 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - - - {{0, 0}, {1920, 1058}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/fa.lproj/Help/index.html b/imageoptim/fa.lproj/Help/index.html new file mode 100644 index 00000000..31868500 --- /dev/null +++ b/imageoptim/fa.lproj/Help/index.html @@ -0,0 +1,75 @@ + + + +Codestin Search App + + + + + + + +

    ImageOptim

    + +

    Ù†Ű­ÙˆÙ‡â€ŒÛŒ ۧ۳ŰȘÙŰ§ŰŻÙ‡

    + +
      +
    1. ÙŰ§ÛŒÙ„â€ŒÙ‡Ű§ ÛŒŰ§ ÙÙˆÙ„ŰŻŰ±â€ŒÙ‡Ű§ÛŒ Ű­Ű§ÙˆÛŒ PNG ÛŒŰ§ JPEG ۱ۧ Ú©ŰŽÛŒŰŻÙ‡ و ۯ۱ ÙŸÙ†ŰŹŰ±Ù‡â€ŒÛŒ ImageOptim Ű±Ù‡Ű§ Ú©Ù†ÛŒŰŻ.
    2. + +
    3. Wait until it finishes.
    4. + +
    5. Profit! (from smaller files)
    6. +
    +

    You can also drop files onto ImageOptim's Dock icon.

    + +

    Learn how to change Preferences.

    + +

    Icons in file table

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkImage has been optimized successfully.
    Green XEverything went fine, but image couldn't be optimized any further.
    Gray starOptimization of this file is in progress.
    Gray dotsFile is queued to be optimized after other files are finished.
    Orange exclamation markThere was an error during optimization. You'll find explanation by running Console.app.
    +

    How does it work

    + +

    ImageOptim is a front-end (GUI) for these applications:

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • and optionally PNGOUT.
    • +
    +

    ImageOptim runs them and automatically selects smallest file.

    + + diff --git a/imageoptim/fa.lproj/Help/prefs.html b/imageoptim/fa.lproj/Help/prefs.html new file mode 100644 index 00000000..971f505e --- /dev/null +++ b/imageoptim/fa.lproj/Help/prefs.html @@ -0,0 +1,78 @@ + + + + +Codestin Search App + + + + + + + +

    ImageOptim Preferences

    +

    « Back to index

    +

    General preferences

    +
    +
    Preserve file permissions, attributes and hardlinks
    +
    +

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same.

    +

    It's slightly faster not to preserve permissions.

    +
    +
    Strip PNG metadata (gamma, color profiles, optional chunks)
    +
    +

    PNG files can have different brightness and saturation in different browsers, because not all browsers support gamma correction and color profiles features equally. Removal of this information makes PNG color more consistent across browsers and reduces file size.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    Strip JPEG metadata (EXIF, color profiles, GPS, rotation, etc.)
    +
    +

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    +
    Maximum quality
    +
    +

    If set to 100%, optimization will be lossless.

    +

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Optimization type
    +
    +

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    +
    +
    Interrupt if takes too long
    +
    +

    PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Optimization level
    +
    +

    Number of different setting combinations tested. It rarely makes sense to try them all.

    +
    +
    Make images interlaced (progressive)
    +
    +

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    +

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    +
    +
    +
    +
    +

    Gifsicle

    +

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    +
    + + diff --git a/imageoptim/fa.lproj/ImageOptim.strings b/imageoptim/fa.lproj/ImageOptim.strings new file mode 100644 index 00000000..7565b0c0 --- /dev/null +++ b/imageoptim/fa.lproj/ImageOptim.strings @@ -0,0 +1,3 @@ +/* Menu Item "ImageOptim Help" */ +"506.title" = "Ű±Ű§Ù‡Ù†Ù…Ű§ÛŒ ImageOptim "; + diff --git a/imageoptim/fi.lproj/Help/index.html b/imageoptim/fi.lproj/Help/index.html new file mode 100644 index 00000000..14efd3d3 --- /dev/null +++ b/imageoptim/fi.lproj/Help/index.html @@ -0,0 +1,60 @@ + + + + +Codestin Search App + + + + + + + +

    ImageOptim

    +

    KÀyttö

    +
      +
    1. VedÀ ja pudota PNG- tai JPEG-tiedostot taikka hakemistot ImageOptimin pÀÀikkunan taulukkonÀkymÀÀn.
    2. +
    3. Odota valmistumista.
    4. +
    5. Profit! (from smaller files)
    6. +
    +

    Tiedostot korvataan pienemmillÀ versioilla. Optimoimattomat versiot siirretÀÀn roskakoriin.

    +

    Voit pudottaa tiedostoja myös ImageOptimin Dock-kuvakkeeseen.

    +

    Lue, kuinka muuttaa asetuksia.

    +

    Kuvakkeet tiedostotaulukossa

    + + + + + + + + + + + + + + + + + + + + + +
    VihreÀ oikein-merkkiKuva on optimoitu onnistuneesti.
    VihreÀ XKaikki sujui hyvin, mutta kuvaa ei voi optimoida tÀmÀn enempÀÀ.
    Harmaa tÀhtiTiedoston optimointi on meneillÀÀn.
    Harmaat pisteetTiedosto on jonossa optimoitavaksi sen jÀlkeen, kun muut tiedostot ovat valmiita.
    Oranssi huutomerkkiOptimoinnin aikana tapahtui virhe. Saat selityksen suorittamalla ohjelman Console.app.
    +

    Kuinka se toimii

    +

    ImageOptim on kÀyttöliittymÀ nÀille sovelluksille:

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • ja PNGOUT.
    • +
    +

    ImageOptim suorittaa ne ja valitsee automaattisesti pienimmÀn tiedoston.

    + + diff --git a/imageoptim/fi.lproj/Help/prefs.html b/imageoptim/fi.lproj/Help/prefs.html new file mode 100644 index 00000000..82bd0096 --- /dev/null +++ b/imageoptim/fi.lproj/Help/prefs.html @@ -0,0 +1,49 @@ + + + + +Codestin Search App + + + + + + +

    ImageOptim-asetukset

    +

    « Takaisin etusivulle

    +

    Yleiset asetukset

    +
    +
    Poista PNG:n metadata (gamma, vÀriprofiilit, valinnaiset lohkot)
    +
    +

    PNG files can have different brightness and saturation in different browsers, because not all browsers support gamma correction and color profiles features equally. Removal of this information makes PNG color more consistent across browsers and reduces file size.

    +

    Myös muita tietoja poistetaan, kuten DPI ja kommentit.

    +
    +
    Poista JPEG:n metadata (EXIF, vÀriprofiilit, GPS, kierto jne.)
    +
    +

    Poistaa kuvan metadatan, kuten vÀriprofiilit, valotusajan, GPS-koordinaatit, kameran mallin ja kuvan luontiin kÀytetyn ohjelmiston nimen.

    +

    Myös upotetut tekijÀnoikeustiedot poistetaan. Huomaa, ettÀ yleisesti ottaen tekijÀnoikeuslaki suojaa kuvia riippumatta siitÀ, onko niissÀ nÀkymÀtöntÀ metadataa vai ei.

    +
    +
    SÀilytÀ tiedostojen oikeudet, mÀÀritteet ja kovat linkit
    +
    +

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same.

    +

    On hieman nopeampaa olla sÀilyttÀmÀttÀ lupia.

    +
    +
    +

    Työkalut

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +

    SVGO works only if you have Node.js installed using the official installer or Homebrew (nvm is not supported).

    +

    Quality

    +
    +
    Lossy minification
    +
    +

    If lossy minification is off, optimization will be lossless. Pixels won't change and optimizations will only remove invisible metadata. This gives larger files, but is safe to run on any file any number of times.

    +

    If lossy minification is on, then images with quality higher than configured, will be converted to have lower quality. This usually gives images that still look good, and gives much much smaller files.

    +
    +
    +

    Optimoinnin taso

    +

    At fastest level optimizations will take only few seconds per image. Fast setting is recommmended for MacBook Air and older Macs.

    +

    Slower levels compress a little better, but take much more time. Large PNG files may take several minutes to compress.

    +

    The slowest level is very very slow, even on the fastest Mac available.

    + + diff --git a/imageoptim/fi.lproj/ImageOptim.strings b/imageoptim/fi.lproj/ImageOptim.strings new file mode 100644 index 00000000..58bfe309 --- /dev/null +++ b/imageoptim/fi.lproj/ImageOptim.strings @@ -0,0 +1,210 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Tuo kaikki eteen"; + +/* Menu Item "Window" */ +"19.title" = "Ikkuna"; + +/* Menu Item "Minimize" */ +"23.title" = "PienennĂ€"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Ikkuna"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Palvelut"; + +/* Menu Item "Services" */ +"131.title" = "Palvelut"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "KĂ€tke ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Lopeta ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "KĂ€tke muut"; + +/* Menu Item "Show All" */ +"150.title" = "NĂ€ytĂ€ kaikki"; + +/* Menu Item "Zoom" */ +"197.title" = "Zoomaa"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Luettelo optimoitavista tiedostoista"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Tiedosto"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Koko"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Tiedoston koko optimoinnin jĂ€lkeen"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Tiedoston koko optimoinnin jĂ€lkeen"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "SÀÀstö"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Tila"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Tietoja: ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Asetukset
"; + +/* Menu Item "Edit" */ +"375.title" = "Muokkaa"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Muokkaa"; + +/* Menu Item "Select All" */ +"377.title" = "Valitse kaikki"; + +/* Menu Item "Undo" */ +"378.title" = "Peru"; + +/* Menu Item "Redo" */ +"384.title" = "Tee sittenkin"; + +/* Menu Item "Cut" */ +"398.title" = "Leikkaa"; + +/* Menu Item "Copy" */ +"399.title" = "Kopioi"; + +/* Menu Item "Paste" */ +"400.title" = "Sijoita"; + +/* Menu Item "Delete" */ +"402.title" = "Poista"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "LisÀÀ uusia tiedostoja tai hakemistoja"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "LisÀÀ"; + +/* Menu Item "File" */ +"429.title" = "Arkisto"; + +/* Top-level Main Menu "File" */ +"430.title" = "Arkisto"; + +/* Menu Item "Add Files
" */ +"437.title" = "LisÀÀ tiedostoja
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimoinnin tila"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimoinnin tila"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Sulje ikkuna"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Ohje"; + +/* Menu Item "Help" */ +"504.title" = "Ohje"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim-ohje"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Tietoja: ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimoi uudelleen"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Tarkista pĂ€ivitykset
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "VedĂ€ ja pudota kuvatiedostot yllĂ€ olevalle alueelle"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Optimoi uudelleen"; + +/* Button "Again" */ +"635.title" = "Uudelleen"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "versio"; + +/* TextFieldCell "version" */ +"646.title" = "versio"; + +/* Menu Item "Tools" */ +"655.title" = "Työkalut"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Työkalut"; + +/* Menu Item "Quick Look" */ +"708.title" = "Pikakatselu"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Pudota kuvat tĂ€hĂ€n"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim-sivusto"; + +/* Menu Item "View Source" */ +"735.title" = "NĂ€ytĂ€ lĂ€hdekoodi"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Optimoidun koko"; + +/* Menu Item "Savings" */ +"741.title" = "SÀÀstö"; + +/* Menu Item "Best tool" */ +"747.title" = "Paras työkalu"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Paras työkalu"; + +/* Menu Item "Original Size" */ +"791.title" = "Koko alkujaan"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Koko alkujaan"; + +/* Menu Item "Show Columns" */ +"809.title" = "NĂ€ytĂ€ sarakkeet"; + +/* Menu Item "Donate" */ +"820.title" = "Lahjoita"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Palauta alkuperĂ€inen"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Laatu: 100 %"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "PysĂ€ytĂ€"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopioi data-URL:nĂ€"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "NĂ€ytĂ€ Finderissa"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "HĂ€viöllinen pienennys"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "NĂ€ytĂ€ Finderissa"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Tila"; + diff --git a/imageoptim/fi.lproj/Localizable.strings b/imageoptim/fi.lproj/Localizable.strings new file mode 100644 index 00000000..15917e22 --- /dev/null +++ b/imageoptim/fi.lproj/Localizable.strings @@ -0,0 +1,60 @@ +/* tooltip */ +"%@ failed to start" = "%@ ei onnistunut aloittamaan"; + +/* undo command name */ +"Add" = "LisÀÀ"; + +/* undo command name */ +"Cut" = "Leikkaa"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Kaikki tarvittavat työkalut on poistettu kĂ€ytöstĂ€ asetuksista"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Tiedostoa ei voi avata"; + +/* tooltip */ +"File cannot be optimized any further" = "Tiedostoa ei voi optimoida enempÀÀ"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Tiedosto ei ole PNG, GIF tai JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim sulkeutuu, kun optimoinnit ovat valmiit"; + +/* tooltip */ +"Inspecting file" = "Tutkitaan tiedostoa"; + +/* kilobytes suffix */ +"KB" = "kt"; + +/* newly added to the queue */ +"New file" = "Uusi tiedosto"; + +/* status bar */ +"Lossy minification enabled" = "HĂ€viöllinen pienennys kĂ€ytössĂ€"; + +/* megabytes suffix */ +"MB" = "Mt"; + +/* tooltip */ +"Optimized file could not be saved" = "Optimoitua tiedostoa ei voitu tallentaa"; + +/* tooltip */ +"Optimized successfully with %@" = "Optimoitu onnistuneesti työkaluin %@"; + +/* tooltip */ +"Reverted to original" = "Palautettu alkuperĂ€inen"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "SÀÀstetty %1$@ / %2$@. YhteensĂ€ %3$@ (jopa %4$@ / tiedosto)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "SÀÀstetty %1$@ / %2$@. KeskimÀÀrin %3$@ / tiedosto (jopa %4$@)"; + +/* command name, tooltip */ +"Started %@" = "Aloitettu %@"; + +/* tooltip */ +"Waiting to be optimized" = "Odotetaan optimointia"; + diff --git a/imageoptim/fi.lproj/PrefsController.strings b/imageoptim/fi.lproj/PrefsController.strings new file mode 100644 index 00000000..4cf51ea7 --- /dev/null +++ b/imageoptim/fi.lproj/PrefsController.strings @@ -0,0 +1,69 @@ + +/* Window title */ +"5.title" = "ImageOptim-asetukset"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Yleiset"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimointinopeus"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Laatu"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Tiedostojen kirjoitus levylle"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "SĂ€ilytĂ€ tiedostojen oikeudet, mÀÀritteet ja kovat linkit"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimoinnin taso"; + +/* "Fast" */ +"819.title" = "Nopea"; + +/* "Insane" */ +"820.title" = "JĂ€rjetön"; + +/* "Normal" */ +"821.title" = "Tavallinen"; + +/* "Extra" */ +"822.title" = "Erityinen"; + +/* Checkbox in Preferences */ +"854.title" = "Poista PNG:n metadata (gamma, vĂ€riprofiilit, valinnaiset lohkot)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Selaimet edellyttĂ€vĂ€t, ettĂ€ gammalohkot poistetaan"; + +/* label "JPEG quality" */ +"868.title" = "JPEG:n laatu"; + +/* Checkbox in Preferences */ +"911.title" = "Poista JPEG:n metadata (EXIF, vĂ€riprofiilit, GPS, kierto jne.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata ja vĂ€riprofiilit"; + +/* Header above list of tools to enable */ +"1107.title" = "Ota kĂ€yttöön"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Verkkolevyille tallentaminen on nopeampaa, kun oikeuksia ei sĂ€ilytetĂ€"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Ei suositella, jos luotat upotettuun tekijĂ€noikeustietoon"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF:n laatu"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Saa tiedostoista paljon pienempiĂ€, mutta voi vaikuttaa kuvien ulkoasuun"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG:n laatu"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Ota hĂ€viöllinen pienennys kĂ€yttöön"; diff --git a/imageoptim/fr.lproj/Credits.html b/imageoptim/fr.lproj/Credits.html new file mode 100644 index 00000000..43b1425e --- /dev/null +++ b/imageoptim/fr.lproj/Credits.html @@ -0,0 +1,31 @@ +
    +

    ImageOptim de Kornel LesiƄski est une interface graphique pour les programmes suivants:

    + +

    ImageOptim peut ĂȘtre redistribuĂ© et modifiĂ© en respectant +la Licence Publique GĂ©nĂ©rale GNU version 2 ou suivante. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +

    Traduction française de Mathias Richter.

    +
    diff --git a/imageoptim/fr.lproj/Credits.rtf b/imageoptim/fr.lproj/Credits.rtf deleted file mode 100644 index 13b23fd1..00000000 --- a/imageoptim/fr.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en/"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 de Kornel Lesi\uc0\u324 ski est une interface graphique pour les programmes suivants :\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} de Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} de Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} de Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} de Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} de Eddie Kohler,\ -{\listtext \'95 }et {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} de Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim peut \'eatre redistribu\'e9 et modifi\'e9 en respectant {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 la Licence Publique G\'e9n\'e9rale GNU version 2 ou suivante}}. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -Traduction fran\'e7aise de Mathias Richter.} \ No newline at end of file diff --git a/imageoptim/fr.lproj/Help/Help.helpindex b/imageoptim/fr.lproj/Help/Help.helpindex deleted file mode 100644 index bf4a8ad6..00000000 Binary files a/imageoptim/fr.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/fr.lproj/Help/index.html b/imageoptim/fr.lproj/Help/index.html index b964da59..813d5134 100644 --- a/imageoptim/fr.lproj/Help/index.html +++ b/imageoptim/fr.lproj/Help/index.html @@ -1,88 +1,76 @@ - - - + + - + +Codestin Search App + + + - Codestin Search App - - - - - - - + - main +

    ImageOptim

    -

    ImageOptim

    +

    Glissez/déposez des fichiers JPG, PNG ou dossiers dans le tableau central d'ImageOptim.

      -
    1. Glissez/déposez des fichiers JPG, PNG ou dossiers dans le tableau central d'ImageOptim.
    2. - -
    3. Attendez la fin des traitements.
    4. +
    5. Attendez la fin des traitements.
    6. Tirez avantage de vos nouveaux fichiers plus petits.
    7. -
    -

    Vous pouvez également déposer vos fichiers sur l'icÎne d'ImageOptim.

    +
  • Vous pouvez Ă©galement dĂ©poser vos fichiers sur l'icĂŽne d'ImageOptim.
  • + +

    Découvrez les différents réglages des préférences.

    -

    Découvrez les différents réglages des préférences.

    +

    Pictogrammes du tableau

    -

    Pictogrammes du tableau

    +

    Coche verte

    - - + + - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + -
    Coche verte
    Traitements réussis, le fichier est plus petit.Traitements réussis, le fichier est plus petit.Croix verte
    Traitements réussis, le fichier n'est pas plus petit (déjà optimal).
    Croix verteTraitements réussis, le fichier n'est pas plus petit (déjà optimal).Roue grise
    Optimisations en cours.
    Roue griseOptimisations en cours.Points gris
    En file d'attente, l'optimisation démarrera prochainement.
    Points grisEn file d'attente, l'optimisation démarrera prochainement.Point d'exclamation orange
    Traitements en erreur. Vous pouvez consultez la log avec Console.app pour plus de détails.
    Point d'exclamation orangeTraitements en erreur. Vous pouvez consultez la log avec Console.app pour plus de détails.Comment ça fonctionne ?
    - -

    Comment ça fonctionne ?

    + +

    ImageOptim est une interface graphique pour les programmes suivants :

    -

    ImageOptim est une interface graphique pour les programmes suivants :

    +

    OxiPNG

      -
    • OptiPNG
    • - -
    • PNGCrush
    • +
    • PNGCrush
    • AdvPNG
    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • et PNGOUT (optionnel, Ă  rajouter manuellement)
    • -
    -

    ImageOptim lance ces programmes et ne conserve que le plus petit fichier généré.

    +
  • ImageOptim lance ces programmes et ne conserve que le plus petit fichier gĂ©nĂ©rĂ©.
  • + +

    ImageOptim les exécute et sélectionne automatiquement le plus petit fichier.

    diff --git a/imageoptim/fr.lproj/Help/prefs.html b/imageoptim/fr.lproj/Help/prefs.html index b03e9573..3b54e4de 100644 --- a/imageoptim/fr.lproj/Help/prefs.html +++ b/imageoptim/fr.lproj/Help/prefs.html @@ -1,91 +1,82 @@ - - + + + + Codestin Search App - - - - - -Général -

    Préférences ImageOptim

    -

    « Retour à l'index

    -

    Normalement vous n'avez pas besoin de modifier les préférences.

    -

    Général

    -
    -
    Conserver les permissions, attributs et liens
    -
    -

    À la place de supprimer l'ancien fichier et d'en crĂ©er un nouveau du mĂȘme nom, ImageOptim remplace directement le contenu de celui-ci. Ceci permet de conserver tous les liens, alias, permissions, attributs
 du fichier. -

    Ne pas conserver ces éléments est légÚrement plus rapide. -

    -
    Réaliser une copie des fichiers originaux
    -

    Copie le fichier original en ajoutant ~ Ă  son nom. Cela ralentit les traitements et remplit votre disque de fichiers de sauvegarde.

    - -
    Supprimer les chunks optionnels
    -

    Si vous ne souhaitez pas conserver un type précis de metadonnées laissez coché (convient particuliÚrement pour le web en retirant les courbes gamma et autres corrections colorimétriques).

    -
    Supprimer les information EXIF
    -

    Supprime les metadonnées : le nom du programme ou de l'appareil ayant produit l'image, les informations de prise de vue, la date


    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Activer
    -

    Doit ĂȘtre cochĂ© pour utiliser JPEGOptim.

    + + + + +

    Préférences d'ImageOptim

    +

    « Retour à l'index

    +

    Préférences globales

    +
    +
    Conserver les permissions, attributs et liens
    +
    +

    À la place de supprimer l'ancien fichier et d'en crĂ©er un nouveau du mĂȘme nom, ImageOptim remplace directement le contenu de celui-ci. Ceci permet de conserver tous les liens, alias, permissions, attributs
 du fichier.

    +

    Ne pas conserver ces éléments est légÚrement plus rapide.

    +
    +
    PNG: Supprimer les chunks optionnels
    +
    +

    Si vous ne souhaitez pas conserver un type précis de metadonnées laissez coché (convient particuliÚrement pour le web en retirant les courbes gamma et autres corrections colorimétriques).

    +

    D'autres informations invisibles sont également retirées comme les DPI et les commentaires.

    +
    +
    JPEG: Supprimer les commentaires et informations EXIF
    +
    +

    Supprime les metadonnées : le nom du programme ou de l'appareil ayant produit l'image, les informations de prise de vue, la date


    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Outils

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    Qualité maximale
    -

    Positionné à 100% l'optimisation sera sans perte.

    -

    Tout réglage inférieur à 100% dégradera la qualité de l'image si celle-ci a déjà été sauvegardée avec une qualité supérieur.

    - -
    +
    +

    Positionné à 100% l'optimisation sera sans perte.

    +

    Tout réglage inférieur à 100% dégradera la qualité de l'image si celle-ci a déjà été sauvegardée avec une qualité supérieur.

    +
    +
    -
    -advpng -

    AdvPNG

    -
    -
    Activer
    -

    Doit ĂȘtre cochĂ© pour utiliser AdvPNG.

    - - -
    -
    Niveau d'optimisation
    -
    AdvPNG est relativement rapide, vous pouvez tranquillement mettre le maximum.
    -
    +
    +

    PNGOUT

    +
    +
    Type d'optimisation
    +
    +

    PNGOUT est trĂšs efficace, mais trĂšs lent. Utilisez un faible niveau si vous ĂȘtes impatient.

    +
    +
    Interrompre si le traitement est trop long
    +
    +

    PNGOUT peut nĂ©cessiter beaucoup de temps pour optimiser les images de grand format. Cette option arrĂȘte PNGOUT proprement au bout d'une minute.

    +
    +
    -
    -optipng -

    OptiPNG

    -
    -
    Activer
    -

    Doit ĂȘtre cochĂ© pour utiliser OptiPNG.

    - - -
    -
    Niveau d'optimisation
    -

    Nombre de combinaisons de réglages différents explorées. Il y a en général trÚs peu de gain à les essayer toutes.

    - -
    Activer l'entrelacement Adam7 (affichage progressif)
    -

    Lors de son chargement une image entrelacée dévoile une vue d'ensemble qui est progressivement affinée, mais cela rend généralement la compression moins efficace.

    -

    Cette case a trois état.
    - Coché : les images produites seront entrelacées.
    - Intermédiaire : conserve le réglage d'origine du fichier.
    - Décoché : les images produites ne seront pas entrelacées.

    -
    +
    +

    OxiPNG

    +
    +
    Niveau d'optimisation
    +
    +

    Nombre de combinaisons de réglages différents explorées. Il y a en général trÚs peu de gain à les essayer toutes.

    +
    +
    Activer l'entrelacement Adam7 (affichage progressif)
    +
    +

    Lors de son chargement une image entrelacée dévoile une vue d'ensemble qui est progressivement affinée, mais cela rend généralement la compression moins efficace.

    +

    Cette case a trois état. + - Coché : les images produites seront entrelacées. + - Intermédiaire : conserve le réglage d'origine du fichier. + - Décoché : les images produites ne seront pas entrelacées.

    +
    +
    -
    -optipng -

    PNGOUT

    -
    -
    Activer
    -

    Doit ĂȘtre cochĂ© pour utiliser PNGOUT. -

    PNGOUT n'est pas fourni avec ImageOptim. C'est un trÚs bon programme, toutefois son concepteur se réserve les droits de distribution, de ce fait vous devez télécharger PNGOUT à part.

    - - -
    -
    Type d'optimisation
    -

    PNGOUT est trĂšs efficace, mais trĂšs lent. Utilisez un faible niveau si vous ĂȘtes impatient.

    - -
    Interrompre si le traitement est trop long
    -

    PNGOUT peut nĂ©cessiter beaucoup de temps pour optimiser les images de grand format. Cette option arrĂȘte PNGOUT proprement au bout d'une minute.

    -
    -
    \ No newline at end of file +
    +

    Gifsicle

    +

    Pour une meilleur compression, vous devriez convertir les fichiers GIF pour des fichiers PNG (ImageOptim ne fait pas cette opération automatiquement).

    +
    + + diff --git a/imageoptim/fr.lproj/ImageOptim.strings b/imageoptim/fr.lproj/ImageOptim.strings new file mode 100644 index 00000000..e8150e02 --- /dev/null +++ b/imageoptim/fr.lproj/ImageOptim.strings @@ -0,0 +1,169 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Tout ramener au premier plan"; + +/* Menu Item "Window" */ +"19.title" = "FenĂȘtre"; + +/* Menu Item "Minimize" */ +"23.title" = "Placer dans le Dock"; + +/* Top-level Main Menu "Window" */ +"24.title" = "FenĂȘtre"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Masquer ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Quitter ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Masquer les autres"; + +/* Menu Item "Show All" */ +"150.title" = "Tout afficher"; + +/* Menu Item "Zoom" */ +"197.title" = "RĂ©duire/agrandir"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Liste des fichiers Ă  optimiser"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Fichier"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Taille"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Gain"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "À propos d'ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "PrĂ©fĂ©rences
"; + +/* Menu Item "Edit" */ +"375.title" = "Édition"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Édition"; + +/* Menu Item "Select All" */ +"377.title" = "Tout sĂ©lectionner"; + +/* Menu Item "Undo" */ +"378.title" = "Annuler"; + +/* Menu Item "Redo" */ +"384.title" = "RĂ©tablir"; + +/* Menu Item "Cut" */ +"398.title" = "Couper"; + +/* Menu Item "Copy" */ +"399.title" = "Copier"; + +/* Menu Item "Paste" */ +"400.title" = "Coller"; + +/* Menu Item "Delete" */ +"402.title" = "Supprimer"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Ajouter des fichiers
"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Ajouter"; + +/* Menu Item "File" */ +"429.title" = "Fichier"; + +/* Top-level Main Menu "File" */ +"430.title" = "Fichier"; + +/* Menu Item "Add Files
" */ +"437.title" = "Ajouter des fichiers
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Statut de l'optimisation"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Fermer"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Aide"; + +/* Menu Item "Help" */ +"504.title" = "Aide"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Aide ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "À propos d'ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimiser Ă  nouveau"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Recherche de mise Ă  jours
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "DĂ©posez les fichiers Ă  optimiser ci-dessus."; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Optimiser Ă  nouveau"; + +/* Button "Again" */ +"635.title" = "Relancer"; + + +/* Menu Item "Tools" */ +"655.title" = "Outils"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Outils"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Taille"; + +/* Menu Item "Savings" */ +"741.title" = "Gain"; + +/* Menu Item "Best tool" */ +"747.title" = "Outils"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Outils"; + +/* Menu Item "Original Size" */ +"791.title" = "Taille (original)"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Taille (original)"; + + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Revenir Ă  l'original"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "QualitĂ©: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "ArrĂȘter"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Copier Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Voir dans le Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Minification avec perte"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Voir dans le Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Statut"; diff --git a/imageoptim/fr.lproj/Localizable.strings b/imageoptim/fr.lproj/Localizable.strings index c731cce2..e0605a3d 100644 --- a/imageoptim/fr.lproj/Localizable.strings +++ b/imageoptim/fr.lproj/Localizable.strings @@ -1,16 +1,61 @@ +/* tooltip */ +"%@ failed to start" = "%@ erreur au lancement"; + +/* undo command name */ +"Add" = "Ajouter des fichiers
"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Tous les programmes sont dĂ©sactivĂ©s dans les PrĂ©fĂ©rences"; -"Can't map file into memory" = "Impossible de charger le fichier en mĂ©moire"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Impossible de charger le fichier en mĂ©moire"; + +/* undo command name */ +"Cut" = "Couper"; + +/* tooltip */ "File cannot be optimized any further" = "Le fichier ne peut ĂȘtre optimisĂ© davantage"; + +/* tooltip */ "File is neither PNG, GIF nor JPEG" = "Le fichier n'est ni un PNG ni un JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim quittera quand les optimisations seront terminĂ©es."; + +/* tooltip */ "Inspecting file" = "Analyse du fichier"; + +/* kilobytes suffix */ +"KB" = "Ko"; + +/* megabytes suffix */ +"MB" = "Mo"; + +/* newly added to the queue */ "New file" = "Nouveau fichier"; + +/* status bar */ +"Lossy minification enabled" = "Minification avec perte activĂ©e"; + +/* tooltip */ "Optimized file could not be saved" = "Le fichier optmimisĂ© n'a pas pu ĂȘtre sauvegardĂ©"; + +/* tooltip */ "Optimized successfully with %@" = "OptimisĂ© avec succĂšs (%@)"; -"Size of optimized file is 0" = "La taille du fichier optimisĂ© est 0"; + +/* tooltip */ +"Reverted to original" = "Retour Ă  l'original"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "%1$@ de sauvegardĂ© sur %2$@. %3$@ au total (jusqu'Ă  %4$@ par fichier)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "%1$@ de sauvegardĂ© sur %2$@. %3$@ par fichier en moyenne (jusqu'Ă  %4$@)"; + +/* command name, tooltip */ "Started %@" = "%@ dĂ©marrĂ©"; -"Waiting in queue" = "En file d'attente"; -"Waiting to be optimized" = "En attente d'optimisation"; -"Waiting to start more optimizations" = "En attente d'autres optimisations"; -"%@ failed to start" = "%@ erreur au lancement"; -"MB" = "Mo"; -"KB" = "Ko"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "En attente d'autres optimisations"; + diff --git a/imageoptim/fr.lproj/MainMenu.xib b/imageoptim/fr.lproj/MainMenu.xib deleted file mode 100644 index 1a1578dc..00000000 --- a/imageoptim/fr.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Statut de l'optimisation - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Fichier - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Taille (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Taille - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Gain - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Outils - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - DĂ©posez les fichiers Ă  optimiser ci-dessus. - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Ajouter des fichiers
 - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{420, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{444, 6}, {85, 25}} - - YES - - 67239424 - 134217728 - Relancer - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Optimiser Ă  nouveau - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - À propos d'ImageOptim - - 2147483647 - - - - - - Recherche de mise Ă  jours
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - PrĂ©fĂ©rences
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Masquer ImageOptim - h - 1048576 - 2147483647 - - - - - - Masquer les autres - h - 1572864 - 2147483647 - - - - - - Tout afficher - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quitter ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Fichier - - 1048576 - 2147483647 - - - submenuAction: - - Fichier - - - - Ajouter des fichiers
 - o - 1048576 - 2147483647 - - - - - - Optimiser Ă  nouveau - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Fermer - w - 1048576 - 2147483647 - - - - - - - - - Édition - - 1048576 - 2147483647 - - - submenuAction: - - Édition - - - - Annuler - z - 1048576 - 2147483647 - - - - - - RĂ©tablir - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Couper - x - 1048576 - 2147483647 - - - - - - Copier - c - 1048576 - 2147483647 - - - - - - Coller - v - 1048576 - 2147483647 - - - - - - Supprimer - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Tout sĂ©lectionner - a - 1048576 - 2147483647 - - - - - - - - - Outils - - 2147483647 - - - submenuAction: - - Outils - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - FenĂȘtre - - 1048576 - 2147483647 - - - submenuAction: - - FenĂȘtre - - - - Placer dans le Dock - m - 1048576 - 2147483647 - - - - - - RĂ©duire/agrandir - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Tout ramener au premier plan - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Taille (original) - - 2147483647 - - - - - - Taille - - 2147483647 - 1 - - - - - - Gain - - 2147483647 - 1 - - - - - - Outils - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Aide - - 1048576 - 2147483647 - - - submenuAction: - - Aide - - - - Aide ImageOptim - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - About ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - version - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Taille - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Liste des fichiers Ă  optimiser - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Ajouter des fichiers
 - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/fr.lproj/PrefsController.strings b/imageoptim/fr.lproj/PrefsController.strings new file mode 100644 index 00000000..6f8e02af --- /dev/null +++ b/imageoptim/fr.lproj/PrefsController.strings @@ -0,0 +1,59 @@ +/* Window title */ +"5.title" = "PrĂ©fĂ©rences ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "GĂ©nĂ©ral"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Vitesse d'optimisation"; + +/* Tab quality (for lossy minification) */ +"177.label" = "QualitĂ©"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Sauvegarde des fichiers"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Conserver les permissions, attributs et liens"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Niveau d'optimisation "; + +/* "Fast" */ +"819.title" = "rapide"; + +/* "Insane" */ +"820.title" = "Ă  donf"; + +/* "Normal" */ +"821.title" = "normal"; + +/* "Extra" */ +"822.title" = "extra"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: Supprimer les chunks optionnels"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "La correction gamma est incompatible avec certains navigateurs Web "; + +/* label "JPEG quality" */ +"868.title" = "JPEG: qualitĂ©"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: Supprimer les commentaires et informations EXIF"; + +/* Header above list of tools to enable */ +"1107.title" = "Activer"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "QualitĂ© du GIF"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "RĂ©duit beaucoup plus la taille des fichiers, mais peut changer l'apparence des images"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: qualitĂ©"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Activer la minification avec perte"; diff --git a/imageoptim/fr.lproj/PrefsController.xib b/imageoptim/fr.lproj/PrefsController.xib deleted file mode 100644 index 74777e4c..00000000 --- a/imageoptim/fr.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - PrĂ©fĂ©rences ImageOptim - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Conserver les permissions, attributs et liens - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - RĂ©aliser une copie des fichiers originaux (annotĂ©e ~) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Sauvegarde des fichiers - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Supprimer les chunks optionnels - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - La correction gamma est incompatible avec certains navigateurs Web - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Supprimer les commentaires et informations EXIF - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Activer - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - GĂ©nĂ©ral - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Type d'optimisation - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - simple - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - xtrĂšme - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - intense - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - plus long - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Essayer de multiples filtres - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Interrompre si le traitement est trop long - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Activer l'entrelacement Adam7 (affichage progressif) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Niveau d'optimisation - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Les images entrelacĂ©es produisent des fichiers plus gros en gĂ©nĂ©ral - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 mĂ©thodes - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Niveau d'optimisation - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - rapide - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Ă  donf - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - QualitĂ© maximale - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/it.lproj/Credits.html b/imageoptim/it.lproj/Credits.html new file mode 100644 index 00000000..48c471d5 --- /dev/null +++ b/imageoptim/it.lproj/Credits.html @@ -0,0 +1,30 @@ +
    +

    ImageOptim di Kornel LesiƄski una GUI per l'utilizzazione di terze parti:

    + +

    ImageOptim puĂČ essere ridistribuito e modificato sotto +Licenza generale pubblica GNU versione 2 o successive. + Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/it.lproj/Credits.rtf b/imageoptim/it.lproj/Credits.rtf deleted file mode 100644 index 5e8d2e2e..00000000 --- a/imageoptim/it.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 di Kornel Lesi\uc0\u324 ski una GUI per l'utilizzazione di terze parti:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} di Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} di Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} di Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} di Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} di Eddie Kohler,\ -{\listtext \'95 }e {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} di Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim pu\'f2 essere ridistribuito e modificato sotto {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 Licenza generale pubblica GNU}}\cf3 \ul \ulc3 versione 2 o successive\cf0 \ulnone - Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.} \ No newline at end of file diff --git a/imageoptim/it.lproj/Help/index.html b/imageoptim/it.lproj/Help/index.html new file mode 100644 index 00000000..b1202b10 --- /dev/null +++ b/imageoptim/it.lproj/Help/index.html @@ -0,0 +1,74 @@ + + + + +Codestin Search App + + + + + +

    ImageOptim

    + +

    Guida all'uso

    + +
      +
    1. Trascina file PNG o JPEG o cartelle dentro il riquadro principale nella finestra di ImageOptim.
    2. + +
    3. Attendi fino a quando non finisce.
    4. + +
    5. Guadagno! (dai files piĂč piccoli)
    6. +
    +

    Puoi anche droppare i file dentro l'icona nel Dock di ImageOptim.

    + +

    Scopri come cambiare le Preferenze.

    + +

    Icone nella tabella dei file

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Segno di spunta verdeL'immagine Ăš stata ottimizzata con successo.
    Green XTutto Ăš andato bene, ma l'immagine non puĂČ essere ottimizzata ancora.
    Stella grigiaL'ottimizzazione di questo file Ăš in corso.
    Punti grigiIl file Ăš in coda per essere ottimizzato subito dopo che altri file sono stati ultimati.
    Punto esclamativo arancioneSi Ăš verificato un errore durante l'ottimizzazione. Troverai maggiori informazioni lanciando Console.app.
    +

    Come funziona

    + +

    ImageOptim Ăš un front-end (GUI) per le seguenti applicazioni:

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • e facoltativamente PNGOUT.
    • +
    +

    ImageOptim li processa e automaticamente seleziona il file piĂč piccolo.

    + + diff --git a/imageoptim/it.lproj/Help/prefs.html b/imageoptim/it.lproj/Help/prefs.html new file mode 100644 index 00000000..96babbc1 --- /dev/null +++ b/imageoptim/it.lproj/Help/prefs.html @@ -0,0 +1,77 @@ + + + + +Codestin Search App + + + + + + +

    Preferenze ImageOptim

    +

    « Torna alla index

    +

    Preferenze generali

    +
    +
    Conserva i permessi, attributi e hardlinks dei file
    +
    +

    Invece di eliminare il vecchio file scrivendone uno nuovo con lo stesso nome, sostituisci solo il contenuto del vecchio file. In questo modo tutti i collegamenti fisici, alias, permessi e attributi estesi del file rimarranno gli stessi.

    +

    E' leggermente piĂč veloce non conservare i permessi.

    +
    +
    Elimina i metadata PNG (gamma, profili di colore, chunks opzionali)
    +
    +

    I file PNG possono avere diversa luminositĂ  e saturazione in diversi browser, perchĂ© non tutti i browser supportano la correzione gamma e profili di colore ugualmente. La rimozione di queste informazioni rende il colore del PNG piĂč coerente tra i vari browser e riduce la dimensione del file.

    +

    Altre informazioni invisibili sono rimosse, come DPI e commenti.

    +
    +
    Elimina i metadata JPEG (EXIF, profili di colore, GPS, rotazione, etc.)
    +
    +

    Rimuove i metadata dell'immagine, come il profilo di colore, tempo di esposizione, le coordinate GPS, modello di fotocamera e il nome del software utilizzato per creare il file.

    +

    Informazioni sul copyright incorporato viene rimosso. Si prega di notare che in generale le immagini sono protette da copyright, indipendentemente se essi contengono tali metadati visibili o meno.

    +
    +
    +

    Strumenti

    +

    Zopfli and PNGOUT sono degli ottimi compressori PNG, ma sono molto lenti. Disabilitali se hai necessitĂ  di ottimizzare i file PNG rapidamente (lascia solo AdvPNG per una rapida, ma comunque ottima compressione).

    +

    Zopfli e OptiPNG puliscono i valori RGB, dei pixel trasparenti (conosciuti come "alpha sporchi"). Disabilita questi due strumenti se stai ottimizzando i file speciali che utilizzano il canale alfa per qualcosa che non sia la trasparenza (ad esempio heightmap nel file di dati di gioco).

    +
    +

    JPEGOptim

    +
    +
    QualitĂ  massima
    +
    +

    Se impostato al 100%, l'ottimizzazione sarĂ  senza perdita di qualitĂ  (lossless).

    +

    Qualsiasi cosa sotto il 100% causerĂ  una perditĂ  di qualitĂ  dei files che saranno salvati con un livello di qualitĂ  piĂč alto.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Tipo di ottimizzazione
    +
    +

    PNGOUT Ăš molto efficace, ma anche molto lento. Utilizza un livello basso se hai poca pazienza.

    +
    +
    Interrompi se richiede troppo tempo
    +
    +

    PNGOUT potrebbe richiedere molto tempo per ottimizzare immagini molto grandi. Questa opzione interrompe senza danni PNGOUT dopo un minuto.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Livello di ottimizzazione
    +
    +

    Numero di diverse impostazioni di combinazioni testate. Raramente ha senso provarle tutte.

    +
    +
    Rende le immagini interlacciate (progressivo)
    +
    +

    Le immagini interlacciate hanno un aspetto migliore quando sono caricate in parte, ma di solito l'interalacciamento rende la compressione meno efficiente.

    +

    Questa casella di controllo ha tre stati: se selezionata, costringerĂ  le immagini ad essere interlacciate. In caso di mix, manterrĂ  l'interalacciamento del file invariato, non spuntato rimuoverĂ  l'interalacciamento dal file.

    +
    +
    +
    +
    +

    Gifsicle

    +

    Per una migliore compressione, Ăš necessario convertire i file GIF in PNG (ImageOptim non lo fa automaticamente).

    +
    + + diff --git a/imageoptim/it.lproj/ImageOptim.strings b/imageoptim/it.lproj/ImageOptim.strings new file mode 100644 index 00000000..c629d018 --- /dev/null +++ b/imageoptim/it.lproj/ImageOptim.strings @@ -0,0 +1,177 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Porta in primo piano"; + +/* Menu Item "Window" */ +"19.title" = "Finestra"; + +/* Menu Item "Minimize" */ +"23.title" = "Contrai"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Finestra"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Servizi"; + +/* Menu Item "Services" */ +"131.title" = "Servizi"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Nascondi ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Esci da ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Nascondi altre"; + +/* Menu Item "Show All" */ +"150.title" = "Mostra tutte"; + +/* Menu Item "Zoom" */ +"197.title" = "Ridimensiona"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lista dei file da ottimizzare"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Dimensione del file dopo l'ottimizzazione"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Stato"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Informazioni su ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Preferenze
"; + +/* Menu Item "Edit" */ +"375.title" = "Modifica"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Modifica"; + +/* Menu Item "Select All" */ +"377.title" = "Seleziona tutto"; + +/* Menu Item "Undo" */ +"378.title" = "Annulla"; + +/* Menu Item "Redo" */ +"384.title" = "Ripristina"; + +/* Menu Item "Cut" */ +"398.title" = "Taglia"; + +/* Menu Item "Copy" */ +"399.title" = "Copia"; + +/* Menu Item "Paste" */ +"400.title" = "Incolla"; + +/* Menu Item "Delete" */ +"402.title" = "Cancella"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Aggiungi nuovi file o cartelle"; + +/* Menu Item "Add Files
" */ +"437.title" = "Aggiungi Files
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Stato dell'ottimizzazione"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Stato ottimizzazione"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Chiudi"; + +/* Menu Item "Help" */ +"504.title" = "Aiuto"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Aiuto"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Aiuto di ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Informazioni di ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Ottimizza ancora"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Controlla gli aggiornamenti
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Clicca e trascina le immagini nella casella superiore"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Aggiungi"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Ottimizza nuovamente"; + +/* Button "Again" */ +"635.title" = "Ancora"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Stato"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "versione"; + +/* TextFieldCell "version" */ +"646.title" = "versione"; + +/* Menu Item "Tools" */ +"655.title" = "UtilitĂ "; + +/* Top-level Main Menu "Tools" */ +"656.title" = "UtilitĂ "; + +/* Menu Item "Quick Look" */ +"708.title" = "Vista veloce"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Rilascia le immagini qui"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Cancellazione Completata"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Calibra Ottimizzazione"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "Sito di ImageOptim "; + +/* Menu Item "View Source" */ +"735.title" = "Mostra sorgente"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Ottimizza dimensione"; + +/* Menu Item "Best tool" */ +"747.title" = "UtilitĂ "; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "UtilitĂ "; + +/* Menu Item "Original Size" */ +"791.title" = "Dimensione Originale"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Dimensione Originale"; + +/* Menu Item "Show Columns" */ +"809.title" = "Mostra Colonne"; + +/* Menu Item "Donate" */ +"820.title" = "Donare"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Copia Data URL"; + diff --git a/imageoptim/it.lproj/InfoPlist.strings b/imageoptim/it.lproj/InfoPlist.strings deleted file mode 100644 index 8b8057a4..00000000 --- a/imageoptim/it.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Localized versions of Info.plist keys */ -CFBundleHelpBookFolder = "Aiuto"; -CFBundleHelpBookName = "Aiuto di ImageOptim"; diff --git a/imageoptim/it.lproj/Localizable.strings b/imageoptim/it.lproj/Localizable.strings index fe2cbcc9..8e54d24a 100644 --- a/imageoptim/it.lproj/Localizable.strings +++ b/imageoptim/it.lproj/Localizable.strings @@ -1,14 +1,46 @@ +/* tooltip */ +"%@ failed to start" = "%@ ha fallito l'avvio"; + +/* undo command name */ +"Add" = "Aggiungi"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Tutte le utilitĂ  sono state disabilitate nelle Preferenze"; -"Can't map file into memory" = "Non posso mappare il file in memoria"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Non posso mappare il file in memoria"; + +/* undo command name */ +"Cut" = "Taglia"; + +/* tooltip */ "File cannot be optimized any further" = "Il file non puĂČ essere ottimizzato ulteriormente"; -"File is neither PNG, GIF nor JPEG" = "Il file non Ăš PNG nĂ© JPG"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Il file non Ăš PNG, nĂ© GIF, nĂ© JPG"; + +/* tooltip */ "Inspecting file" = "Controllo il file"; + +/* newly added to the queue */ "New file" = "Nuovo file"; + +/* tooltip */ "Optimized file could not be saved" = "Il file ottimizzato potrebbe non essere salvato"; + +/* tooltip */ "Optimized successfully with %@" = "Ottimizzazione avvenuta al (%@)"; -"Size of optimized file is 0" = "La capacitĂ  di ottimizzazione ottenuta Ăš 0"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Risparmiato %1$@ su %2$@. %3$@ complessivamente (fino a %4$@ per file)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Risparmiato %1$@ su %2$@. %3$@ per file in media (fino a %4$@)"; + +/* command name, tooltip */ "Started %@" = "%@ iniziato"; -"Waiting in queue" = "Coda in attesa"; -"Waiting to be optimized" = "In attesa di ottimizzazione"; -"Waiting to start more optimizations" = "Attendi prima di effettuare ulteriori ottimizzazioni"; -"%@ failed to start" = "%@ ha fallito l'avvio"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Attendi prima di effettuare ulteriori ottimizzazioni"; + diff --git a/imageoptim/it.lproj/MainMenu.xib b/imageoptim/it.lproj/MainMenu.xib deleted file mode 100644 index 86033020..00000000 --- a/imageoptim/it.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Stato dell'ottimizzazione - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - File - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Size (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Size - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Savings - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - UtilitĂ  - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Clicca e trascina le immagini nella casella superiore - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Aggiungi - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{428, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{452, 6}, {77, 25}} - - YES - - 67239424 - 134217728 - Ancora - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Ottimizza nuovamente - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Informazioni su ImageOptim - - 2147483647 - - - - - - Controlla gli aggiornamenti
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferenze
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Servizi - - 1048576 - 2147483647 - - - submenuAction: - - Servizi - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Nascondi ImageOptim - h - 1048576 - 2147483647 - - - - - - Nascondi altre - h - 1572864 - 2147483647 - - - - - - Mostra tutte - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Esci da ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - File - - 1048576 - 2147483647 - - - submenuAction: - - File - - - - Aggiungi Files
 - o - 1048576 - 2147483647 - - - - - - Ottimizza ancora - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Chiudi - w - 1048576 - 2147483647 - - - - - - - - - Modifica - - 1048576 - 2147483647 - - - submenuAction: - - Modifica - - - - Annulla - z - 1048576 - 2147483647 - - - - - - Ripristina - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Taglia - x - 1048576 - 2147483647 - - - - - - Copia - c - 1048576 - 2147483647 - - - - - - Incolla - v - 1048576 - 2147483647 - - - - - - Cancella - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Seleziona tutto - a - 1048576 - 2147483647 - - - - - - - - - UtilitĂ  - - 2147483647 - - - submenuAction: - - UtilitĂ  - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Finestra - - 1048576 - 2147483647 - - - submenuAction: - - Finestra - - - - Contrai - m - 1048576 - 2147483647 - - - - - - Ridimensiona - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Porta in primo piano - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Size (original) - - 2147483647 - - - - - - Optimized Size - - 2147483647 - 1 - - - - - - Savings - - 2147483647 - 1 - - - - - - UtilitĂ  - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Aiuto - - 1048576 - 2147483647 - - - submenuAction: - - Aiuto - - - - Aiuto di ImageOptim - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Informazioni di ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - version - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Size - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Lista dei file da ottimizzare - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Aggiungi nuovi file o cartelle - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/it.lproj/PrefsController.strings b/imageoptim/it.lproj/PrefsController.strings new file mode 100644 index 00000000..1c463bec --- /dev/null +++ b/imageoptim/it.lproj/PrefsController.strings @@ -0,0 +1,48 @@ +/* Window title */ +"5.title" = "Preferenze di ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Generali"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Livello di ottimizzazione"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Sto salvando i file sul disco"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Conserva i permessi, gli attributi e gli hardlink nei file"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Livello di ottimizzazione"; + +/* "Fast" */ +"819.title" = "Veloce"; + +/* "Insane" */ +"820.title" = "Insano"; + +/* "Normal" */ +"821.title" = "Normale"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: Rimuovi tutti i chunks opzionali"; + +/* label "JPEG quality" */ +"868.title" = "JPEG qualitĂ "; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: Togli i marcatori EXIF e i commenti dai file"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata e profili Colore"; + +/* Header above list of tools to enable */ +"1107.title" = "Abilitato"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Non consigliato se ti basi su informazioni incorporate sul copyright"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG qualitĂ "; + diff --git a/imageoptim/it.lproj/PrefsController.xib b/imageoptim/it.lproj/PrefsController.xib deleted file mode 100644 index 5d8dcba6..00000000 --- a/imageoptim/it.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - Preferenze di ImageOptim - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Conserva i permessi, gli attributi e gli hardlink nei file - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Fai una copia dei file originali prima di salvare - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Sto salvando i file sul disco - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Rimuovi tutti i chunks opzionali - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Web browsers require gamma chunks to be removed - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Togli i marcatori EXIF e i commenti dai file - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Abilitato - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - Generali - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Tipo di ottimizzazione - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Semplice - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Estrema - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intensa - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - Longest match - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Prova filtri differenti - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Interrompi se impiega troppo tempo nell'esecuzione - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Crea immagini interlacciate (progressive) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Livello di ottimizzazione - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - I file interlacciati hanno maggiori dimensioni - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 trials - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 trials - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Livello di ottimizzazione - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Veloce - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Insano - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normale - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - QualitĂ  massima - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/ja.lproj/Credits.html b/imageoptim/ja.lproj/Credits.html new file mode 100644 index 00000000..9304ff58 --- /dev/null +++ b/imageoptim/ja.lproj/Credits.html @@ -0,0 +1,29 @@ +
    +

    ă‚€ăƒĄăƒŒă‚žă‚Șプティム by ă‚łăƒ«ăƒăƒ« LesiƄski and contributors is a GUI for 3rd party utilities:

    + +

    ă‚€ăƒĄăƒŒă‚žă‚Șプティム can be redistributed and modified under GNU General Public License version 2 or later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/ja.lproj/Credits.rtf b/imageoptim/ja.lproj/Credits.rtf deleted file mode 100644 index 2f5fc817..00000000 --- a/imageoptim/ja.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1187 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 by Kornel Lesi\uc0\u324 ski and contributors is a GUI for 3rd party utilities:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} by Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} by Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} by Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} by Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} by Eddie Kohler,\ -{\listtext \'95 }and {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} by Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim can be redistributed and modified under {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License version 2 or later}}. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -Translation by {\field{\*\fldinst{HYPERLINK "http://groovymedia.jp"}}{\fldrslt Shota WATANABE}}.} \ No newline at end of file diff --git a/imageoptim/ja.lproj/Help/Help.helpindex b/imageoptim/ja.lproj/Help/Help.helpindex deleted file mode 100644 index bf806034..00000000 Binary files a/imageoptim/ja.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/ja.lproj/Help/index.html b/imageoptim/ja.lproj/Help/index.html index 97ba16bb..d9475fa8 100644 --- a/imageoptim/ja.lproj/Help/index.html +++ b/imageoptim/ja.lproj/Help/index.html @@ -1,78 +1,64 @@ - - - + + - + - Codestin Search App - - - - - - - + + + +Codestin Search App - main - -

    ImageOptim

    +

    ă‚€ăƒĄăƒŒă‚žă‚Șプティム

    äœżă„æ–č

      -
    1. PNGăƒ•ă‚Ąă‚€ăƒ«ăƒ»JPEGăƒ•ă‚Ąă‚€ăƒ«ăŸăŸăŻăƒ•ă‚©ăƒ«ăƒ€ă‚’ImageOptimă‚Šă‚Łăƒłăƒ‰ă‚Šăźăƒ•ă‚Ąă‚€ăƒ«äž€èŠ§ăƒ†ăƒŒăƒ–ăƒ«ăƒ“ăƒ„ăƒŒă«ăƒ‰ăƒ©ăƒƒă‚°ă‚ąăƒłăƒ‰ăƒ‰ăƒ­ăƒƒăƒ—ă—ăŠăă ă•ă„ă€‚
    2. +
    3. PNG ăƒ•ă‚Ąă‚€ăƒ«ă€JPEG ăƒ•ă‚Ąă‚€ăƒ«ă€ăŸăŸăŻăƒ•ă‚©ăƒ«ăƒ€ă‚’ă€ă‚€ăƒĄăƒŒă‚žă‚Șプティム ă‚Šă‚€ăƒłăƒ‰ă‚Šă«ăƒ‰ăƒ©ăƒƒă‚°ă‚ąăƒłăƒ‰ăƒ‰ăƒ­ăƒƒăƒ—ă—ăŠăă ă•ă„ă€‚
    4. -
    5. 漌äș†ă™ă‚‹ăŸă§ćŸ…ăĄăŸă™ă€‚
    6. +
    7. 漌äș†ă™ă‚‹ăŸă§ăŠćŸ…ăĄăă ă•ă„ă€‚
    8. -
    9. ćœčă«ç«‹ăŁăŸ! (ăƒ•ă‚Ąă‚€ăƒ«ăźćźč量は氏さくăȘăŁăŠă„ăŸă™)
    10. +
    11. ćŸ—ă—ăŸă—ăŸă­ïŒ (ăƒ•ă‚Ąă‚€ăƒ«ăźćźč量が氏さくăȘă‚ŠăŸă—ăŸ)
    - -

    ćŒæ§˜ă«ImageOptimたDockă‚ąă‚€ă‚łăƒłă«ă‚‚ăƒ‰ăƒ©ăƒƒă‚°ă‚ąăƒłăƒ‰ăƒ‰ăƒ­ăƒƒăƒ—ă§ăăŸă™ă€‚

    +

    ćŒæ§˜ă«ă‚€ăƒĄăƒŒă‚žă‚Șプティムぼ Dock ă‚ąă‚€ă‚łăƒłă«ă‚‚ăƒ‰ăƒ©ăƒƒă‚°ă‚ąăƒłăƒ‰ăƒ‰ăƒ­ăƒƒăƒ—ă§ăăŸă™ă€‚

    èš­ćźšăźć€‰æ›Žæ–čæł•に぀いお

    -

    ăƒ•ă‚Ąă‚€ăƒ«äž€èŠ§ăźă‚ąă‚€ă‚łăƒł

    +

    ăƒ•ă‚Ąă‚€ăƒ«äž€èŠ§ăźă‚ąă‚€ă‚łăƒłă«ă€ă„ăŠ

    - - + + - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + -
    Green Checkmark
    Green Checkmarkç”»ćƒăŻæ­Łă—ăæœ€é©ćŒ–ă•ă‚ŒăŸă€‚ç”»ćƒăźæœ€é©ćŒ–ă«æˆćŠŸă—ăŸă—ăŸă€‚
    Green X
    Green Xć‡Šç†ăŻă†ăŸăèš€ăŁăŸăŒç”»ćƒăŻă“ă‚Œä»„äžŠæœ€é©ćŒ–ă§ăăȘă‹ăŁăŸă€‚ć‡Šç†ăŻă†ăŸăă„ăăŸă—ăŸăŒă€ç”»ćƒă‚’ă“ă‚Œä»„äžŠæœ€é©ćŒ–ă§ăăŸă›ă‚“ă§ă—ăŸă€‚
    Gray star
    Gray stară“ăźç”»ćƒăźæœ€é©ćŒ–ăŻé€ČèĄŒäž­ă§ă™ă€‚ă“ăźăƒ•ă‚Ąă‚€ăƒ«ăźæœ€é©ćŒ–ă‚’ćźŸèĄŒäž­ă§ă™ă€‚
    Gray dots
    Gray dotsă“ăźç”»ćƒăƒ•ă‚Ąă‚€ăƒ«ăŻć‡Šç†ćŸ…ăĄăƒȘă‚čăƒˆă«ć…„ăŁăŠăŠă‚Šă€ä»–ăźăƒ•ă‚Ąă‚€ăƒ«ăźć‡Šç†ăŒćźŒäș†ă—ăŸćŸŒă«æœ€é©ćŒ–ă•ă‚ŒăŸă™ă€‚ă“ăźăƒ•ă‚Ąă‚€ăƒ«ăŻă€ä»–ăźăƒ•ă‚Ąă‚€ăƒ«ăźæœ€é©ćŒ–ăŒç”‚ă‚ă‚‹ăźă‚’ćŸ…ăŁăŠă„ăŸă™ă€‚
    Orange exclamation mark
    Orange exclamation markæœ€é©ćŒ–ć‡Šç†äž­ă«ă‚šăƒ©ăƒŒăŒç™șç”Ÿă—ăŸă—ăŸă€‚ ă‚łăƒłă‚œăƒŒăƒ«.appă‹ă‚‰ç«‹ăĄäžŠă’ă‚‹ă“ăšă§è©łçŽ°ăȘèȘŹæ˜Žă‚’ćŸ—ă‚‹ă“ăšăŒă§ăăŸă™ă€‚æœ€é©ćŒ–äž­ă«ă‚šăƒ©ăƒŒăŒç™șç”Ÿă—ăŸă—ăŸă€‚ ă‚łăƒłă‚œăƒŒăƒ«.app から掟曠をçąșèȘă§ăăŸă™ă€‚
    + +

    仕甄み

    -

    ć‹•äœœćŽŸç†

    - -

    ImageOptimăŻäž‹èš˜ăźă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźăƒ•ăƒ­ăƒłăƒˆă‚šăƒłăƒ‰(GUI)です:

    +

    ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ăŻäž‹èš˜ăźă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźăƒ•ăƒ­ăƒłăƒˆă‚šăƒłăƒ‰ (GUI) です:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +66,10 @@

      ć‹•äœœćŽŸç†

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • -
    • PNGOUTă‚Șăƒ—ă‚·ăƒ§ăƒłïŒ‰.
    • +
    • PNGOUTă‚Șăƒ—ă‚·ăƒ§ăƒłïŒ‰
    - -

    ImageOptimはこれらぼケプăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłă‚’ćźŸèĄŒă—ă€ă‚‚ăŁăšă‚‚ć°ă•ă„ăƒ•ă‚Ąă‚€ăƒ«ă‚’è‡Șć‹•ă§éžæŠžă—ăŸă™ă€‚

    +

    ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ăŻäžŠèš˜ăźă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłă‚’ćźŸèĄŒă—ăŠă€ă‚‚ăŁăšă‚‚ćźč量ぼ氏さăȘăƒ•ă‚Ąă‚€ăƒ«ă‚’è‡Șć‹•ă§éžæŠžă—ăŸă™ă€‚

    diff --git a/imageoptim/ja.lproj/Help/prefs.html b/imageoptim/ja.lproj/Help/prefs.html index c339bfe8..658453c2 100644 --- a/imageoptim/ja.lproj/Help/prefs.html +++ b/imageoptim/ja.lproj/Help/prefs.html @@ -1,105 +1,77 @@ - - -Codestin Search App + + + + +Codestin Search App - - - - - - -äž€èˆŹ -

    ImageOptim ç’°ćąƒèš­ćźš

    -

    « TOPă«æˆ»ă‚‹

    -

    é€šćžžäž‹èš˜ăźèš­ćźšă‚’ć€‰æ›Žă™ă‚‹ćż…èŠăŻă‚ă‚ŠăŸă›ă‚“ă€‚

    -

    äž€èˆŹèš­ćźš

    -
    -
    ăƒ•ă‚Ąă‚€ăƒ«ăźăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă€ć±žæ€§ă€ăƒăƒŒăƒ‰ăƒȘăƒłă‚Żă‚’ç¶­æŒă™ă‚‹
    -
    -

    ć€ă„ăƒ•ă‚Ąă‚€ăƒ«ă‚’ć‰Šé™€ă—ăŠæ–°ă—ă„ăƒ•ă‚Ąă‚€ăƒ«ă‚’äœœă‚Šç›Žă™ä»Łă‚ă‚Šă«ă€ć€ă„ăƒ•ă‚Ąă‚€ăƒ«ăźć†…ćźčă‚’æ›Žæ–°ă™ă‚‹ă ă‘ăźć‡Šç†ă‚’ă—ăŸă™ă€‚ă“ăźă“ăšă«ă‚ˆă‚Šă€ć…šăŠăźăƒăƒŒăƒ‰ăƒȘăƒłă‚Żă€ă‚šă‚€ăƒȘケă‚čă€ăƒ•ă‚Ąă‚€ăƒ«ăźæ‰€æœ‰æš©ă€ăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă€ăƒ•ă‚Ąă‚€ăƒ«ăźæ‹ĄćŒ”æƒ…ć ±ăȘă©ăŻćŒă˜ăŸăŸäżăŸă‚ŒăŸă™ă€‚

    -

    ă“ă‚ŒăŻăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă‚’ç¶­æŒă—ăȘă„ă‚ˆă‚Šă‚‚ć°‘ă€…é«˜é€Ÿă§ă™ă€‚

    -
    -
    ăƒ•ă‚Ąă‚€ăƒ«äżć­˜ć‰ă«ć…ƒăƒ•ă‚Ąă‚€ăƒ«ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ă™ă‚‹
    -

    ć…ƒăƒ•ă‚Ąă‚€ăƒ«ćăźć…ˆé ­ă«~ă‚’ă€ă‘ăŸă‚łăƒ”ăƒŒă‚’äżć­˜ă—ăŸă™. ă“ă‚ŒăŻæœ€é©ćŒ–äœœæ„­ă‚’ć°‘ă€…é…ăă—ă€ăƒăƒƒă‚Żă‚ąăƒƒăƒ—ăƒ•ă‚Ąă‚€ăƒ«ă§ă‚ăȘたぼディă‚čă‚Żă‚’æ•Łă‚‰ă‹ă—ăŸă™ă€‚

    - -
    すăčăŠăźæ‹ĄćŒ”æƒ…ć ±ă‚’ć‰Šé™€
    -

    ă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆć‘ă‘ăźæœ€é©ćŒ–ă‚’ă™ă‚‹ć Žćˆæœ‰ćŠčă«ă—ăŠăă ă•ă„ă€‚ă‚‚ă—PNGă«ćż…èŠăȘăƒĄă‚żăƒ‡ăƒŒă‚żă‚’ć…„ă‚ŒăŠă„ă‚‹ć Žćˆç„ĄćŠčă«ă—ăŠăă ă•ă„ă€‚

    -
    EXIFć‡șćŠ›æƒ…ć ±ăšă‚łăƒĄăƒłăƒˆă‚’ăƒ•ă‚Ąă‚€ăƒ«ă‹ă‚‰ć–ă‚Šé™€ă
    -

    ç”»ćƒăźăƒĄă‚żăƒ‡ăƒŒă‚żïŒˆă‚«ăƒ©ăƒŒèš­ćźšă€éœČć‡șæ™‚é–“ă€GPSæƒ…ć ±ă€ă‚«ăƒĄăƒ©ăźăƒąăƒ‡ăƒ«æƒ…ć ±ă€JPEGć‡șćŠ›ă«ă€ă‹ă‚ŒăŸă‚œăƒ•ăƒˆă‚Šă‚§ă‚ąćăȘă©ïŒ‰ă‚’ć‰Šé™€ă—ăŸă™ă€‚1.3MBä»„äžŠăźç”»ćƒă‹ă‚‰ăŻăƒĄă‚żăƒ‡ăƒŒă‚żă‚’ć‰Šé™€ă—ăŸă›ă‚“ă€‚

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    有ćŠč
    -

    チェックされた栮搈、ImageOptimはJPEGăƒ•ă‚Ąă‚€ăƒ«ăźæœ€é©ćŒ–ă‚’è©ŠèĄŒă—ăŸă™ă€‚

    - -
    æœ€ć€§ć“èłȘ
    -

    100%ă«èš­ćźšă•ă‚ŒăŸć Žćˆă€æœ€é©ćŒ–ăŻç„Ąćœ§çžźă§ă™ă€‚

    -

    100%ä»„äž‹ă«èš­ćźšă—ăŸć Žćˆă€ăă‚Œä»„äžŠăźć“èłȘă§äżçźĄă•ă‚ŒăŸç”»ćƒăźć“èłȘäœŽäž‹ă«ă€ăȘăŒă‚ŠăŸă™ă€‚

    - -
    -
    -
    -pngout -

    PNGOUT

    -
    -
    有ćŠč
    -

    チェックされた栮搈、 ImageOptimはPNGăƒ•ă‚Ąă‚€ăƒ«ă‚’PNGOUTă‚’äœżăŁăŠæœ€é©ćŒ–ă‚’è©ŠèĄŒă—ăŸă™ă€‚ -

    PNGOUTはImageOptimă«ăƒăƒłăƒ‰ăƒ«ă•ă‚ŒăŠă„ăŸă›ă‚“. ă“ă‚ŒăŻăšăŠă‚‚è‰Żă„ăƒ„ăƒŒăƒ«ă§ă™ăŒă€PNGOUTăźäœœè€…ăŻć†é…ćžƒă‚’çŠæ­ąă—ăŠă„ăŸă™ă€‚ăăźăŸă‚ă€è‡Ș戆でPNGOUTă‚’ăƒ€ă‚Šăƒłăƒ­ăƒŒăƒ‰ă™ă‚‹ćż…èŠăŒă‚ă‚ŠăŸă™ă€‚

    - -
    -
    æœ€é©ćŒ–ă‚żă‚€ăƒ—
    -

    PNGOUTはべどもćŠč率的ですが、侀æ–čéžćžžă«äœŽé€Ÿă§ă™ă€‚äœŽé€ŸăȘć‡Šç†ă«è€ăˆă‚‰ă‚ŒăȘă„ć Žćˆă€äœŽă„æœ€é©ćŒ–ăƒŹăƒ™ăƒ«ă‚’éžă¶ă‚ˆă†ă«ă—ăŠăă ă•ă„ă€‚

    - -
    ćźŸèĄŒæ™‚é–“ăŒé•·ă™ăŽă‚‹ć Žćˆäž­æ–­ă™ă‚‹
    -

    PNGOUTăŻéžćžžă«ć€šăăźæ™‚é–“ă‚’ć€§ăăȘăƒ•ă‚Ąă‚€ăƒ«ăźæœ€é©ćŒ–ăźăŸă‚ă«äœżă†ć ŽćˆăŒă‚ă‚ŠăŸă™ă€‚ă“ăźă‚Șăƒ—ă‚·ăƒ§ăƒłă‚’ăƒă‚§ăƒƒă‚Żă™ă‚‹ăšă€PNGOUTが1ćˆ†ä»„äžŠć‡Šç†ă‚’ç¶šă‘ăŸć Žćˆć‡Šç†ă‚’äž­æ–­ă—ăŸă™ă€‚

    -
    -
    -
    -advpng -

    AdvPNG

    -
    -
    有ćŠč
    -

    チェックされた栮搈、ImageOptimはPNGăƒ•ă‚Ąă‚€ăƒ«ă‚’AdvPNGăƒ„ăƒŒăƒ«ă‚’ćˆ©ç”šă—ăŠæœ€é©ćŒ–ă‚’æ€è€ƒă—ăŸă™ă€‚

    - -
    -
    æœ€é©ćŒ–ăƒŹăƒ™ăƒ«
    -
    AdvPNGăŻæŻ”èŒƒçš„é«˜é€Ÿă§ă™ă€‚æœ€ć€§ăźæœ€é©ćŒ–ăƒŹăƒ™ăƒ«ă‚’äœżă†ă“ăšă‚’ăŠă™ă™ă‚ă—ăŸă™ă€‚
    -
    -
    -
    -optipng -

    OptiPNG

    -
    -
    有ćŠč
    -

    チェックされた栮搈、ImageOptimはPNGăƒ•ă‚Ąă‚€ăƒ«ă‚’OptiPNGăƒ„ăƒŒăƒ«ă‚’ćˆ©ç”šă—ăŠæœ€é©ćŒ–ă—ăŸă™ă€‚

    - -
    -
    æœ€é©ćŒ–ăƒŹăƒ™ăƒ«
    -

    テă‚čăƒˆă•ă‚Œă‚‹é•ă†èš­ćźšăźç”„ăżćˆă‚ă›ăźç•Șć·ă‚’éžæŠžă—ăŸă™ă€‚ć…šăŠă‚’ćźŸæ–œă™ă‚‹ă“ăšăŒæ„ć‘łă‚’æˆă™ă“ăšăŻă‚ăŸă‚Šă‚ă‚ŠăŸă›ă‚“ă€‚

    + + -
    ç”»ćƒă‚’ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚č(ăƒ—ăƒ­ă‚°ăƒŹăƒƒă‚·ăƒ–)挖する
    -

    ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čćŒ–ă•ă‚ŒăŸç”»ćƒăŻèȘ­ăżèŸŒăżé€”äž­ăźçŠ¶æ…‹ă§è‰ŻăèŠ‹ăˆăŸă™ă€‚ă—ă‹ă—ă€äž€èˆŹçš„ă«ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čćŒ–ă«ă‚ˆă‚Šćœ§çžźăźæœ€é©ćŒ–ăŻéžćŠč率にăȘăŁăŠă—ăŸă„ăŸă™ă€‚

    -

    こぼチェックボックă‚čăŻïŒ“ă€ăźçŠ¶æ…‹ă‚’æŒăĄăŸă™ïŒšă€€ăƒă‚§ăƒƒă‚Żă•ă‚ŒăŸć Žćˆă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čćŒ–ă‚’ć…±ç”šă—ăŸă™ă€‚ç”„ăżćˆă‚ă›ă‚‹ć Žćˆă€ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čèš­ćźšă‚’ç¶­æŒă—ăŸă™ă€‚ăƒă‚§ăƒƒă‚ŻăŒć…„ăŁăŠă„ăȘă„ć Žćˆă€ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čă‚’ć…šăŠè§Łé™€ă—ăŸă™ă€‚

    -
    + + +

    ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ç’°ćąƒèš­ćźš

    +

    « TOPă«æˆ»ă‚‹

    +

    äž€èˆŹèš­ćźš

    +
    +
    ăƒ•ă‚Ąă‚€ăƒ«ăźăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă€ć±žæ€§ă€ăƒăƒŒăƒ‰ăƒȘăƒłă‚Żă‚’ç¶­æŒă™ă‚‹
    +
    +

    ć€ă„ăƒ•ă‚Ąă‚€ăƒ«ă‚’ć‰Šé™€ă—ăŠæ–°ă—ă„ăƒ•ă‚Ąă‚€ăƒ«ă‚’äœœă‚Šç›Žă™ä»Łă‚ă‚Šă«ă€ć€ă„ăƒ•ă‚Ąă‚€ăƒ«ăźć†…ćźčă‚’æ›Žæ–°ă™ă‚‹ă ă‘ăźć‡Šç†ă‚’ă—ăŸă™ă€‚ă“ăźă“ăšă«ă‚ˆă‚Šă€ć…šăŠăźăƒăƒŒăƒ‰ăƒȘăƒłă‚Żă€ă‚šă‚€ăƒȘケă‚čă€ăƒ•ă‚Ąă‚€ăƒ«ăźæ‰€æœ‰æš©ă€ăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă€ăƒ•ă‚Ąă‚€ăƒ«ăźæ‹ĄćŒ”æƒ…ć ±ăȘă©ăŻćŒă˜ăŸăŸäżăŸă‚ŒăŸă™ă€‚

    +

    ă“ă‚ŒăŻăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă‚’ç¶­æŒă—ăȘă„ă‚ˆă‚Šă‚‚ć°‘ă€…é«˜é€Ÿă§ă™ă€‚

    +
    +
    すăčăŠăźæ‹ĄćŒ”æƒ…ć ±ă‚’ć‰Šé™€
    +
    +

    ă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆć‘ă‘ăźæœ€é©ćŒ–ă‚’ă™ă‚‹ć Žćˆæœ‰ćŠčă«ă—ăŠăă ă•ă„ă€‚ă‚‚ă—PNGă«ćż…èŠăȘăƒĄă‚żăƒ‡ăƒŒă‚żă‚’ć…„ă‚ŒăŠă„ă‚‹ć Žćˆç„ĄćŠčă«ă—ăŠăă ă•ă„ă€‚

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    EXIFć‡șćŠ›æƒ…ć ±ăšă‚łăƒĄăƒłăƒˆă‚’ăƒ•ă‚Ąă‚€ăƒ«ă‹ă‚‰ć–ă‚Šé™€ă
    +
    +

    ç”»ćƒăźăƒĄă‚żăƒ‡ăƒŒă‚żïŒˆă‚«ăƒ©ăƒŒèš­ćźšă€éœČć‡șæ™‚é–“ă€GPSæƒ…ć ±ă€ă‚«ăƒĄăƒ©ăźăƒąăƒ‡ăƒ«æƒ…ć ±ă€JPEGć‡șćŠ›ă«ă€ă‹ă‚ŒăŸă‚œăƒ•ăƒˆă‚Šă‚§ă‚ąćăȘă©ïŒ‰ă‚’ć‰Šé™€ă—ăŸă™ă€‚1.3MBä»„äžŠăźç”»ćƒă‹ă‚‰ăŻăƒĄă‚żăƒ‡ăƒŒă‚żă‚’ć‰Šé™€ă—ăŸă›ă‚“ă€‚

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    ăƒ„ăƒŒăƒ«

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    +
    æœ€é«˜ć“èłȘ
    +
    +

    100%ă«èš­ćźšă•ă‚ŒăŸć Žćˆă€æœ€é©ćŒ–ăŻç„Ąćœ§çžźă§ă™ă€‚

    +

    100%ä»„äž‹ă«èš­ćźšă—ăŸć Žćˆă€ăă‚Œä»„äžŠăźć“èłȘă§äżçźĄă•ă‚ŒăŸç”»ćƒăźć“èłȘäœŽäž‹ă«ă€ăȘăŒă‚ŠăŸă™ă€‚

    +
    +
    -
    -gifsicle -

    Gifsicle

    -
    -
    有ćŠč
    -

    チェックされた栮搈、ImageOptimはGIRăƒ•ă‚Ąă‚€ăƒ«ă‚’Gifsicleă‚’ćˆ©ç”šă—ăŠæœ€é©ćŒ–ă—ăŸă™ă€‚ - -

    GIFăƒ•ă‚Ąă‚€ăƒ«ăŻă‚€ăƒłăƒ†ăƒŒăƒŹăƒŒă‚č挖されるかされăȘă„ă‹ă‚’æœ€ć°ćŒ–ă™ă‚‹æ–čをè‡Șć‹•çš„ă«éžæŠžă—ăŸă™ă€‚ăƒ•ă‚Ąă‚€ăƒ«ăźäž­ă«ă‚ă‚‹ă‚łăƒĄăƒłăƒˆăŻć‰Šé™€ă•ă‚ŒăŸă™ă€‚

    -

    GifsicleăŻă‚ąăƒ‹ăƒĄăƒŒă‚·ăƒ§ăƒłGIFă«æœ‰ćŠčă«ćƒăă€ă‚ąăƒ‹ăƒĄăƒŒă‚·ăƒ§ăƒłGIFではăȘă„ć Žćˆă‚ăŸă‚Šæœ€é©ćŒ–ă•ă‚ŒăŸă›ă‚“ă€‚

    - -

    æœ€ă‚‚æœ€é©ă«ćœ§çžźă™ă‚‹ăŸă‚ă«GIFăƒ•ă‚Ąă‚€ăƒ«ă‚’PNGă«ć€‰æ›ă™ăčăă§ă™ă€‚ïŒˆImageOptimはè‡Șć‹•çš„ă«ă“ă‚Œă‚‰ă‚’ćźŸæ–œă—ăŸă›ă‚“ă€‚ïŒ‰

    +
    +

    PNGOUT

    +
    +
    æœ€é©ćŒ–ă‚żă‚€ăƒ—
    +
    +

    PNGOUTはべどもćŠč率的ですが、侀æ–čéžćžžă«äœŽé€Ÿă§ă™ă€‚äœŽé€ŸăȘć‡Šç†ă«è€ăˆă‚‰ă‚ŒăȘă„ć Žćˆă€äœŽă„æœ€é©ćŒ–ăƒŹăƒ™ăƒ«ă‚’éžă¶ă‚ˆă†ă«ă—ăŠăă ă•ă„ă€‚

    +
    +
    ćźŸèĄŒæ™‚é–“ăŒé•·ă™ăŽă‚‹ć Žćˆäž­æ–­ă™ă‚‹
    +
    +

    PNGOUTăŻéžćžžă«ć€šăăźæ™‚é–“ă‚’ć€§ăăȘăƒ•ă‚Ąă‚€ăƒ«ăźæœ€é©ćŒ–ăźăŸă‚ă«äœżă†ć ŽćˆăŒă‚ă‚ŠăŸă™ă€‚ă“ăźă‚Șăƒ—ă‚·ăƒ§ăƒłă‚’ăƒă‚§ăƒƒă‚Żă™ă‚‹ăšă€PNGOUTが1ćˆ†ä»„äžŠć‡Šç†ă‚’ç¶šă‘ăŸć Žćˆć‡Šç†ă‚’äž­æ–­ă—ăŸă™ă€‚

    +
    +
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescanはjpegtrană‚’ć…ƒă«ă—ăŸă‚čクăƒȘプトです。JPEGăƒ•ă‚Ąă‚€ăƒ«ă‚’ç©æ„”çš„ă«ćˆ†æžă—é«˜ă„ćœ§çžźçŽ‡ă‚’ćźŸçŸă—ăŸă™ă€‚äœ†ă—ă€ć…šăŠăźăƒ–ăƒ©ă‚Šă‚¶ăŒć‡șćŠ›ćŸŒăźăƒ•ă‚Ąă‚€ăƒ«ă«ćŻŸćżœă—ăŠă„ă‚‹ă‚ă‘ă§ăŻă‚ă‚ŠăŸă›ă‚“ă€‚

    +
    +

    OxiPNG

    +
    +
    æœ€é©ćŒ–ăƒŹăƒ™ăƒ«
    +
    +

    テă‚čăƒˆă•ă‚Œă‚‹é•ă†èš­ćźšăźç”„ăżćˆă‚ă›ăźç•Șć·ă‚’éžæŠžă—ăŸă™ă€‚ć…šăŠă‚’ćźŸæ–œă™ă‚‹ă“ăšăŒæ„ć‘łă‚’æˆă™ă“ăšăŻă‚ăŸă‚Šă‚ă‚ŠăŸă›ă‚“ă€‚

    +
    +
    ç”»ćƒă‚’ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚č(ăƒ—ăƒ­ă‚°ăƒŹăƒƒă‚·ăƒ–)挖する
    +
    +

    ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čćŒ–ă•ă‚ŒăŸç”»ćƒăŻèȘ­ăżèŸŒăżé€”äž­ăźçŠ¶æ…‹ă§è‰ŻăèŠ‹ăˆăŸă™ă€‚ă—ă‹ă—ă€äž€èˆŹçš„ă«ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čćŒ–ă«ă‚ˆă‚Šćœ§çžźăźæœ€é©ćŒ–ăŻéžćŠč率にăȘăŁăŠă—ăŸă„ăŸă™ă€‚

    +

    こぼチェックボックă‚čăŻïŒ“ă€ăźçŠ¶æ…‹ă‚’æŒăĄăŸă™ïŒšă€€ăƒă‚§ăƒƒă‚Żă•ă‚ŒăŸć Žćˆă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čćŒ–ă‚’ć…±ç”šă—ăŸă™ă€‚ç”„ăżćˆă‚ă›ă‚‹ć Žćˆă€ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čèš­ćźšă‚’ç¶­æŒă—ăŸă™ă€‚ăƒă‚§ăƒƒă‚ŻăŒć…„ăŁăŠă„ăȘă„ć Žćˆă€ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čă‚’ć…šăŠè§Łé™€ă—ăŸă™ă€‚

    +
    +
    +
    +

    Gifsicle

    +

    æœ€ă‚‚æœ€é©ă«ćœ§çžźă™ă‚‹ăŸă‚ă«GIFăƒ•ă‚Ąă‚€ăƒ«ă‚’PNGă«ć€‰æ›ă™ăčăă§ă™ă€‚ïŒˆă‚€ăƒĄăƒŒă‚žă‚Șプティムはè‡Șć‹•çš„ă«ă“ă‚Œă‚‰ă‚’ćźŸæ–œă—ăŸă›ă‚“ă€‚ïŒ‰

    +
    + + diff --git a/imageoptim/ja.lproj/ImageOptim.strings b/imageoptim/ja.lproj/ImageOptim.strings new file mode 100644 index 00000000..62a639dd --- /dev/null +++ b/imageoptim/ja.lproj/ImageOptim.strings @@ -0,0 +1,231 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "すăčăŠă‚’æ‰‹ć‰ă«ç§»ć‹•"; + +/* Menu Item "Window" */ +"19.title" = "ă‚Šă‚€ăƒłăƒ‰ă‚Š"; + +/* Class = "NSWindow"; title = "ImageOptim"; ObjectID = "21"; */ +"21.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șプティム"; + +/* Menu Item "Minimize" */ +"23.title" = "ă—ăŸă†"; + +/* Top-level Main Menu "Window" */ +"24.title" = "ă‚Šă‚€ăƒłăƒ‰ă‚Š"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "ăƒĄă‚€ăƒłăƒĄăƒ‹ăƒ„ăƒŒ"; + +/* Class = "NSMenuItem"; title = "ImageOptim"; ObjectID = "56"; */ +"56.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șプティム"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "57"; */ +"57.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șプティム"; + +/* Top-level Main Menu "Services" */ +"130.title" = "ă‚”ăƒŒăƒ“ă‚č"; + +/* Menu Item "Services" */ +"131.title" = "ă‚”ăƒŒăƒ“ă‚č"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șプティムを隠す"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ă‚’ç”‚äș†"; + +/* Menu Item "Hide Others" */ +"145.title" = "ほかを隠す"; + +/* Menu Item "Show All" */ +"150.title" = "すăčăŠă‚’èĄšç€ș"; + +/* Menu Item "Zoom" */ +"197.title" = "æ‹Ąć€§ïŒçžźć°"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "æœ€é©ćŒ–ă™ă‚‹ăƒ•ă‚Ąă‚€ăƒ«ăƒȘă‚čト"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "ăƒ•ă‚Ąă‚€ăƒ«"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "ゔむă‚ș"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "æœ€é©ćŒ–ćŸŒăźă‚”ă‚€ă‚ș"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "æœ€é©ćŒ–ćŸŒăźă‚”ă‚€ă‚ș"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "節箄率"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "ă‚čăƒ†ăƒŒă‚żă‚č"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ă«ă€ă„ăŠ"; + +/* Menu Item "Preferences
" */ +"363.title" = "ç’°ćąƒèš­ćźšâ€Š"; + +/* Menu Item "Edit" */ +"375.title" = "線集"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "線集"; + +/* Menu Item "Select All" */ +"377.title" = "すăčăŠă‚’éžæŠž"; + +/* Menu Item "Undo" */ +"378.title" = "ć–ă‚Šæ¶ˆă™"; + +/* Menu Item "Redo" */ +"384.title" = "やり目す"; + +/* Menu Item "Cut" */ +"398.title" = "ă‚«ăƒƒăƒˆ"; + +/* Menu Item "Copy" */ +"399.title" = "ă‚łăƒ”ăƒŒ"; + +/* Menu Item "Paste" */ +"400.title" = "ăƒšăƒŒă‚čト"; + +/* Menu Item "Delete" */ +"402.title" = "扊陀"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "æ–°ă—ă„ăƒ•ă‚Ąă‚€ăƒ«ăŸăŸăŻăƒ•ă‚©ăƒ«ăƒ€ă‚’èżœćŠ "; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "èżœćŠ "; + +/* Menu Item "File" */ +"429.title" = "ăƒ•ă‚Ąă‚€ăƒ«"; + +/* Top-level Main Menu "File" */ +"430.title" = "ăƒ•ă‚Ąă‚€ăƒ«"; + +/* Menu Item "Add Files
" */ +"437.title" = "ăƒ•ă‚Ąă‚€ăƒ«ă‚’èżœćŠ â€Š"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "æœ€é©ćŒ–ă‚čăƒ†ăƒŒă‚żă‚č"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "æœ€é©ćŒ–ă‚čăƒ†ăƒŒă‚żă‚č"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "ă‚Šă‚€ăƒłăƒ‰ă‚Šă‚’é–‰ă˜ă‚‹"; + +/* Menu Item "Help" */ +"504.title" = "ăƒ˜ăƒ«ăƒ—"; + +/* Top-level Main Menu "Help" */ +"505.title" = "ăƒ˜ăƒ«ăƒ—"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șプティム ăƒ˜ăƒ«ăƒ—"; + +/* Window Title "About ImageOptim" */ +"526.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ă«ă€ă„ăŠ"; + +/* Menu Item "Optimize Again" */ +"593.title" = "憍ćșŠæœ€é©ćŒ–する"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "ă‚ąăƒƒăƒ—ăƒ‡ăƒŒăƒˆă‚’çąșèȘâ€Š"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "äžŠăźé ˜ćŸŸă«ç”»ćƒăƒ•ă‚Ąă‚€ăƒ«ă‚’ăƒ‰ăƒ©ăƒƒă‚°ïŒ†ăƒ‰ăƒ­ăƒƒăƒ—ă—ăŠăă ă•ă„"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "憍ćșŠæœ€é©ćŒ–ă‚’ćźŸèĄŒă™ă‚‹"; + +/* Button "Again" */ +"635.title" = "ć†ćźŸèĄŒ"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "ă‚čăƒ†ăƒŒă‚żă‚č"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "ăƒăƒŒă‚žăƒ§ăƒł"; + +/* TextFieldCell "version" */ +"646.title" = "ăƒăƒŒă‚žăƒ§ăƒł"; + +/* Menu Item "Tools" */ +"655.title" = "ăƒ„ăƒŒăƒ«"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "ăƒ„ăƒŒăƒ«"; + +/* Menu Item "Quick Look" */ +"708.title" = "ă‚Żă‚€ăƒƒă‚Żăƒ«ăƒƒă‚Ż"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "ă“ă“ă«ç”»ćƒă‚’ăƒ‰ăƒ­ăƒƒăƒ—ă—ăŠăă ă•ă„"; + +/* Menu Item "Delete Completed" */ +"721.title" = "ć‰Šé™€ćźŒäș†"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "æœ€é©ćŒ–ćźŒäș†"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șプティム ă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆ"; + +/* Menu Item "View Source" */ +"735.title" = "ă‚œăƒŒă‚čă‚’èĄšç€ș"; + +/* Menu Item "Optimized Size" */ +"740.title" = "æœ€é©ćŒ–ćŸŒăźă‚”ă‚€ă‚ș"; + +/* Menu Item "Savings" */ +"741.title" = "節箄率"; + +/* Menu Item "Best tool" */ +"747.title" = "ベă‚čăƒˆăƒ„ăƒŒăƒ«"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "ベă‚čăƒˆăƒ„ăƒŒăƒ«"; + +/* Menu Item "Original Size" */ +"791.title" = "ć…ƒăźă‚”ă‚€ă‚ș"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "ć…ƒăźă‚”ă‚€ă‚ș"; + +/* Menu Item "Show Columns" */ +"809.title" = "ă‚«ăƒ©ăƒ ă‚’èĄšç€ș"; + +/* Menu Item "Donate" */ +"820.title" = "ćŻ„ä»˜"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "ć…ƒă«æˆ»ă™"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "擁èłȘ: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "べめる"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Data URL ćœąćŒă§ă‚łăƒ”ăƒŒ"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Finder ă«èĄšç€ș"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "非揯逆朧羼"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Finder ă«èĄšç€ș"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "ă‚čăƒ†ăƒŒă‚żă‚č"; + diff --git a/imageoptim/ja.lproj/InfoPlist.strings b/imageoptim/ja.lproj/InfoPlist.strings new file mode 100644 index 00000000..d9abad4b --- /dev/null +++ b/imageoptim/ja.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +CFBundleDisplayName = "ă‚€ăƒĄăƒŒă‚žă‚Șプティム"; +CFBundleName = "ă‚€ăƒĄăƒŒă‚žă‚Șプティム"; diff --git a/imageoptim/ja.lproj/Localizable.strings b/imageoptim/ja.lproj/Localizable.strings index bfc80745..7a51e6d1 100644 --- a/imageoptim/ja.lproj/Localizable.strings +++ b/imageoptim/ja.lproj/Localizable.strings @@ -1,6 +1,55 @@ +/* tooltip */ +"%@ failed to start" = "%@ ă§ăźæœ€é©ćŒ–ăźé–‹ć§‹ă«ć€±æ•—ă—ăŸă—ăŸ"; + +/* undo command name */ +"Add" = "èżœćŠ "; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "ćż…é ˆăƒ„ăƒŒăƒ«ă™ăčăŠăŒç’°ćąƒèš­ćźšă§ç„ĄćŠčにăȘăŁăŠă„ăŸă™"; + +/* tooltip, generic loading error */ +"Can't open the file" = "ăƒ•ă‚Ąă‚€ăƒ«ă‚’ăƒĄăƒąăƒȘă«ć±•é–‹ă§ăăŸă›ă‚“"; + +/* undo command name */ +"Cut" = "ă‚«ăƒƒăƒˆ"; + +/* tooltip */ "File cannot be optimized any further" = "ă“ă‚Œä»„äžŠăƒ•ă‚Ąă‚€ăƒ«ă‚’æœ€é©ćŒ–ă§ăăŸă›ă‚“"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "ăƒ•ă‚Ąă‚€ăƒ«ăŒ PNG、GIF、JPEG ăźă„ăšă‚ŒăźćœąćŒă§ă‚‚ă‚ă‚ŠăŸă›ă‚“"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "æœ€é©ćŒ–ćźŒäș†ćŸŒă«ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ă‚’ç”‚äș†ă—ăŸă™"; + +/* tooltip */ +"Inspecting file" = "ăƒ•ă‚Ąă‚€ăƒ«ăźæ€œèšŒäž­"; + +/* newly added to the queue */ +"New file" = "æ–°ă—ă„ăƒ•ă‚Ąă‚€ăƒ«"; + +/* status bar */ +"Lossy minification enabled" = "éžćŻé€†ćœ§çžźăŒæœ‰ćŠčćŒ–ă•ă‚ŒăŸă—ăŸ"; + +/* tooltip */ "Optimized file could not be saved" = "æœ€é©ćŒ–ă•ă‚ŒăŸăƒ•ă‚Ąă‚€ăƒ«ă‚’äżć­˜ă§ăăŸă›ă‚“ă§ă—ăŸ"; -"Optimized successfully with %@" = "%@ă§æ­Łă—ăæœ€é©ćŒ–ăŒćźŒäș†ă—ăŸă—ăŸ"; -"Size of optimized file is 0" = "æœ€é©ćŒ–ă‚’ă™ă‚‹ăƒ•ă‚Ąă‚€ăƒ«ăźćźč量が0でした"; -"Waiting to be optimized" = "æœ€é©ćŒ–äž­ă§ă™"; -"Waiting to start more optimizations" = "èżœćŠ ăźæœ€é©ćŒ–é–‹ć§‹ă‚’ćŸ…æ©Ÿäž­ă§ă™"; + +/* tooltip */ +"Optimized successfully with %@" = "%@ ă§æœ€é©ćŒ–ă‚’ćźŒäș†ă—ăŸă—ăŸ"; + +/* tooltip */ +"Reverted to original" = "ć…ƒă«æˆ»ă—ăŸă—ăŸ"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "%2$@ ぼうち %1$@ă€ć…šäœ“ă§ %3$@ (1ăƒ•ă‚Ąă‚€ăƒ«æœ€ć€§ă§ %4$@) çŻ€çŽ„ă—ăŸă—ăŸă€‚"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "%2$@ ぼうち %1$@、1ăƒ•ă‚Ąă‚€ăƒ«ćčłć‡ă§ %3$@ (æœ€ć€§ă§ %4$@) çŻ€çŽ„ă—ăŸă—ăŸă€‚"; + +/* command name, tooltip */ +"Started %@" = "%@ ă§æœ€é©ćŒ–ă‚’é–‹ć§‹ă—ăŸă—ăŸ"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "èżœćŠ ăźæœ€é©ćŒ–ăźé–‹ć§‹ă‚’ćŸ…ăŁăŠă„ăŸă™"; + diff --git a/imageoptim/ja.lproj/MainMenu.xib b/imageoptim/ja.lproj/MainMenu.xib deleted file mode 100644 index 9ca33f8b..00000000 --- a/imageoptim/ja.lproj/MainMenu.xib +++ /dev/null @@ -1,3499 +0,0 @@ - - - - 1060 - 12A269 - 2549 - 1187 - 624.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2549 - - - NSArrayController - NSButton - NSButtonCell - NSCustomObject - NSCustomView - NSImageCell - NSImageView - NSMenu - NSMenuItem - NSNumberFormatter - NSProgressIndicator - NSScrollView - NSScroller - NSTableColumn - NSTableHeaderView - NSTableView - NSTextField - NSTextFieldCell - NSTextView - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - NO - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75497536 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 134217728 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - æœ€é©ćŒ–ă‚čăƒ†ăƒŒă‚żă‚č - - - filename - 345 - 100 - 1000 - - 75497536 - 2048 - ăƒ•ă‚Ąă‚€ăƒ« - - - 3 - MC4zMzMzMzI5OQA - - - - - 67108928 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75497536 - 67110912 - 慃ćźč量 - - - - - - 67108928 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75497536 - 67110912 - ćźč量 - - - - - - 67108928 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75497536 - 67110912 - çŻ€æž›çŽ‡ - - - - - - 67108928 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75497536 - 2048 - ベă‚čăƒˆăƒ„ăƒŒăƒ« - - - - - - 67108928 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - NO - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - NO - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - 0.25 - 4 - 1 - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67108928 - 306321472 - äžŠă«ç”»ćƒăƒ•ă‚Ąă‚€ăƒ«ă‚’ăƒ‰ăƒ©ăƒƒă‚°ïŒ†ăƒ‰ăƒ­ăƒƒăƒ—ă—ăŠăă ă•ă„ - - - - - NO - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67108864 - 134217728 - èżœćŠ  - - - -2030813184 - 35 - - NSImage - NSAddTemplate - - - - - NO - - - - 1313 - {{434, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{458, 6}, {71, 25}} - - YES - - 67108864 - 134217728 - ć†ćźŸèĄŒ - - - -2034483200 - 268435491 - - NSImage - NSRefreshTemplate - - 憍ćșŠæœ€é©ćŒ–ă‚’ćźŸèĄŒă™ă‚‹ - r - - NO - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - ăƒĄă‚€ăƒłăƒĄăƒ‹ăƒ„ăƒŒ - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - ImageOptim に぀いお - - 2147483647 - - - - - - ă‚ąăƒƒăƒ—ăƒ‡ăƒŒăƒˆă‚’çąșèȘ 
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ç’°ćąƒèš­ćźšâ€Š - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ă‚”ăƒŒăƒ“ă‚č - - 1048576 - 2147483647 - - - submenuAction: - - ă‚”ăƒŒăƒ“ă‚č - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ImageOptim を隠す - h - 1048576 - 2147483647 - - - - - - ほかを隠す - h - 1572864 - 2147483647 - - - - - - すăčăŠă‚’èĄšç€ș - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ImageOptim を甂äș† - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - ăƒ•ă‚Ąă‚€ăƒ« - - 1048576 - 2147483647 - - - submenuAction: - - ăƒ•ă‚Ąă‚€ăƒ« - - - - ăƒ•ă‚Ąă‚€ăƒ«ă‚’èżœćŠ  
 - o - 1048576 - 2147483647 - - - - - - 憍ćșŠæœ€é©ćŒ–をする - r - 1048576 - 2147483647 - - - - - - YES - YES - æœ€é©ćŒ–ćźŒäș† - r - 1572864 - 2147483647 - - - - - - ă‚Żă‚€ăƒƒă‚Żăƒ«ăƒƒă‚Ż - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - 閉じる - w - 1048576 - 2147483647 - - - - - - - - - 線集 - - 1048576 - 2147483647 - - - submenuAction: - - 線集 - - - - ć–ă‚Šæ¶ˆă™ - z - 1048576 - 2147483647 - - - - - - やり目す - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ă‚«ăƒƒăƒˆ - x - 1048576 - 2147483647 - - - - - - ă‚łăƒ”ăƒŒ - c - 1048576 - 2147483647 - - - - - - ăƒšăƒŒă‚čト - v - 1048576 - 2147483647 - - - - - - 扊陀 - CA - 1048576 - 2147483647 - - - - - - YES - YES - ć‰Šé™€ćźŒäș† - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - すăčăŠă‚’éžæŠž - a - 1048576 - 2147483647 - - - - - - - - - ăƒ„ăƒŒăƒ« - - 2147483647 - - - submenuAction: - - ăƒ„ăƒŒăƒ« - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - ă‚Šă‚€ăƒłăƒ‰ă‚Š - - 1048576 - 2147483647 - - - submenuAction: - - ă‚Šă‚€ăƒłăƒ‰ă‚Š - - - - ă—ăŸă† - m - 1048576 - 2147483647 - - - - - - æ‹Ąć€§ïŒçžźć° - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - すăčăŠă‚’æ‰‹ć‰ă«ç§»ć‹• - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - ă‚«ăƒ©ăƒ ă‚’èĄšç€ș - - 2147483647 - - - submenuAction: - - - - - - 慃ćźč量 - - 2147483647 - - - - - - æœ€é©ćŒ–ćŸŒă‚”ă‚€ă‚ș - - 2147483647 - 1 - - - - - - çŻ€æž›çŽ‡ - - 2147483647 - 1 - - - - - - ベă‚čăƒˆăƒ„ăƒŒăƒ« - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - ăƒ˜ăƒ«ăƒ— - - 1048576 - 2147483647 - - - submenuAction: - - ăƒ˜ăƒ«ăƒ— - - - - ImageOptim ăƒ˜ăƒ«ăƒ— - - 1048576 - 2147483647 - - - - - - ImageOptim ă‚Šă‚§ăƒ–ă‚”ă‚€ăƒˆ - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - ă‚œăƒŒă‚čă‚łăƒŒăƒ‰ă‚’èŠ‹ă‚‹ - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - ImageOptim に぀いお - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 134217728 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 228}} - - - - - - - - - - - - - - 38 - - - - 284 - 1 - - - 33556485 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - NO - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - NO - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - 0.25 - 4 - 1 - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70254657 - 4363264 - ăƒăƒŒă‚žăƒ§ăƒł - - - - - NO - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75497536 - 67110912 - ćźč量 - - - 3 - MC4zMzMzMzI5OQA - - - - - 337641536 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - æœ€é©ćŒ–ă™ă‚‹ăƒ•ă‚Ąă‚€ăƒ«ăƒȘă‚čト - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - æœ€é©ćŒ–ćŸŒăźćźč量 - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - æ–°ă—ă„ăƒ•ă‚Ąă‚€ăƒ«ăŸăŸăŻăƒ•ă‚©ăƒ«ăƒ€ă‚’èżœćŠ  - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - æœ€é©ćŒ–ă‚čăƒ†ăƒŒă‚żă‚č - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - ă‚čăƒ†ăƒŒă‚żă‚č - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - ă“ă“ă«ç”»ćƒă‚’ăƒ‰ăƒ­ăƒƒăƒ—ă—ăŠăă ă•ă„ - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - æœ€é©ćŒ–ćŸŒăźćźč量 - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/ja.lproj/PrefsController.strings b/imageoptim/ja.lproj/PrefsController.strings new file mode 100644 index 00000000..725c54b4 --- /dev/null +++ b/imageoptim/ja.lproj/PrefsController.strings @@ -0,0 +1,67 @@ +/* Window title */ +"5.title" = "ă‚€ăƒĄăƒŒă‚žă‚Șăƒ—ăƒ†ă‚Łăƒ ç’°ćąƒèš­ćźš"; + +/* The first prefs tab (misc/general) */ +"167.label" = "äž€èˆŹ"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "æœ€é©ćŒ–ăźé€ŸćșŠ"; + + +/* Title in box "Writing files to disk" */ +"280.title" = "ăƒ•ă‚Ąă‚€ăƒ«ăźăƒ‡ă‚Łă‚čă‚Żæ›žăèŸŒăż"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "ăƒ•ă‚Ąă‚€ăƒ«ăźăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă€ć±žæ€§ă€ăƒăƒŒăƒ‰ăƒȘăƒłă‚Żă‚’ç¶­æŒă™ă‚‹"; + +/* label in speed tab "Optimization level" */ +"818.title" = "æœ€é©ćŒ–ăƒŹăƒ™ăƒ«"; + +/* "Fast" */ +"819.title" = "äœŽă„ăŒé«˜é€Ÿ"; + +/* "Insane" */ +"820.title" = "éžćžžă«é«˜ă„"; + +/* "Normal" */ +"821.title" = "æ™źé€š"; + +/* "Extra" */ +"822.title" = "é«˜ă„"; + +/* Checkbox in Preferences */ +"854.title" = "PNGăźăƒĄă‚żăƒ‡ăƒŒă‚żă‚’ć–ă‚Šé™€ă (ă‚Źăƒłăƒžć€€ă€ă‚«ăƒ©ăƒŒăƒ—ăƒ­ăƒ•ă‚Ąă‚€ăƒ«ăȘど)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "äž€éƒšăźă‚Šă‚§ăƒ–ăƒ–ăƒ©ă‚Šă‚¶ăŻă‚Źăƒłăƒžć€€ă«ćŻŸćżœă—ăŠă„ăŸă›ă‚“"; + +/* label "JPEG quality" */ +"868.title" = "JPEG ぼ擁èłȘ"; + +/* Checkbox in Preferences */ +"911.title" = "JPEGăźăƒĄă‚żăƒ‡ăƒŒă‚żă‚’ć–ă‚Šé™€ă (EXIFă€ă‚«ăƒ©ăƒŒăƒ—ăƒ­ăƒ•ă‚Ąă‚€ăƒ«ă€GPSăȘど)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "ăƒĄă‚żăƒ‡ăƒŒă‚żăšă‚«ăƒ©ăƒŒăƒ—ăƒ­ăƒ•ă‚Ąă‚€ăƒ«"; + +/* Header above list of tools to enable */ +"1107.title" = "有ćŠč"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "ç¶­æŒă—ăȘă„ć Žćˆă€ăƒăƒƒăƒˆăƒŻăƒŒă‚Żăƒ‰ăƒ©ă‚€ăƒ–ăžăźäżć­˜ăŒæ—©ăăȘă‚ŠăŸă™"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "ćŸ‹ă‚èŸŒăŸă‚ŒăŸè‘—äœœæš©æƒ…ć ±ă‚’ćż…èŠăšă™ă‚‹ć ŽćˆăŻăŠă™ă™ă‚ă—ăŸă›ă‚“"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF ぼ擁èłȘ"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "ăƒ•ă‚Ąă‚€ăƒ«ăźă‚”ă‚€ă‚șがより氏さくăȘă‚ŠăŸă™ăŒă€ç”»ćƒăźèŠ‹ăŸç›źăŒć€‰ă‚ă‚‹ă“ăšăŒă‚ă‚ŠăŸă™"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG ぼ擁èłȘ"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "éžćŻé€†ćœ§çžźă‚’æœ‰ćŠčにする"; + diff --git a/imageoptim/ja.lproj/PrefsController.xib b/imageoptim/ja.lproj/PrefsController.xib deleted file mode 100644 index d3a735f4..00000000 --- a/imageoptim/ja.lproj/PrefsController.xib +++ /dev/null @@ -1,3300 +0,0 @@ - - - - 1060 - 12A269 - 2549 - 1187 - 624.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2549 - - - NSArrayController - NSBox - NSButton - NSButtonCell - NSCustomObject - NSNumberFormatter - NSSlider - NSSliderCell - NSTabView - NSTabViewItem - NSTextField - NSTextFieldCell - NSUserDefaultsController - NSView - NSWindowTemplate - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim ç’°ćąƒèš­ćźš - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - - YES - - -2080374784 - 0 - ăƒ•ă‚Ąă‚€ăƒ«ăźăƒ‘ăƒŒăƒŸăƒƒă‚·ăƒ§ăƒłă€ć±žæ€§ă€ăƒăƒŒăƒ‰ăƒȘăƒłă‚Żă‚’ç¶­æŒă™ă‚‹ - - LucidaGrande - 13 - 1044 - - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - NO - - - - 268 - {{15, 11}, {400, 18}} - - - - YES - - 67108864 - 0 - ăƒ•ă‚Ąă‚€ăƒ«äżć­˜ć‰ă«ć…ƒăƒ•ă‚Ąă‚€ăƒ«ăźăƒăƒƒă‚Żă‚ąăƒƒăƒ—ă‚’ă™ă‚‹ - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{2, 2}, {434, 58}} - - - - - - {{159, 176}, {438, 75}} - - - - {0, 0} - - 67108864 - 0 - ăƒ•ă‚Ąă‚€ăƒ«ăźăƒ‡ă‚Łă‚čă‚Żæ›žăèŸŒăż - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - - 1 - YES - - 67108864 - 134217728 - - - - 1 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - - YES - - -2080374784 - 0 - すăčăŠăźæ‹ĄćŒ”æƒ…ć ±ă‚’ć‰Šé™€ - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 264 - {{36, 14}, {385, 14}} - - - - YES - - 67108864 - 4194304 - ć€šăăźă‚Šă‚§ăƒ–ăƒ–ăƒ©ă‚Šă‚¶ăŻă‚Źăƒłăƒžæƒ…ć ±ă«ćŻŸćżœă—ăŠă„ăŸă›ă‚“ - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - NO - - - {{1, 1}, {436, 60}} - - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - - _NS:18 - {0, 0} - - 67108864 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - - YES - - -2080374784 - 0 - EXIFć‡șćŠ›æƒ…ć ±ăšă‚łăƒĄăƒłăƒˆă‚’ăƒ•ă‚Ąă‚€ăƒ«ă‹ă‚‰ć–ă‚Šé™€ă - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{1, 1}, {436, 38}} - - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - - _NS:18 - {0, 0} - - 67108864 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - - YES - - -2080374784 - 0 - Gifsicle - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 171}, {110, 18}} - - - - YES - - -2080374784 - 0 - PNGOUT - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 151}, {110, 18}} - - - - YES - - -2080374784 - 0 - PNGCrush - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 131}, {110, 18}} - - - - YES - - -2080374784 - 0 - OptiPNG - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 111}, {110, 18}} - - - - YES - - -2080374784 - 0 - AdvPNG - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 82}, {110, 18}} - - - - YES - - -2080374784 - 0 - JPEGOptim - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 62}, {110, 18}} - - - - YES - - -2080374784 - 0 - Jpegtran - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{16, 42}, {110, 18}} - - - - YES - - -2080374784 - 0 - Jpegrescan - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{1, 1}, {138, 197}} - - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - - _NS:9 - {0, 0} - - 67108864 - 0 - 有ćŠč - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - - äž€èˆŹ - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67108864 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - NO - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67108864 - 71303168 - æœ€é©ćŒ–ă‚żă‚€ăƒ— - - - - - - NO - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67108864 - 272629760 - ă‚·ăƒłăƒ—ăƒ« - - - - - - NO - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67108864 - 71303168 - ç©¶æ„” - - - - - - NO - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67108864 - 138412032 - æż€ă—ă„ - - - - - - NO - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67108864 - 138412032 - 最長䞀臎 - - - - - - NO - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67108864 - 0 - æ§˜ă€…ăȘé•ă†ăƒ•ă‚Łăƒ«ă‚żă‚’è©ŠèĄŒă™ă‚‹ - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67108864 - 134217728 - - - - 6 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080374784 - 0 - ćźŸèĄŒæ™‚é–“ăŒé•·ă™ăŽă‚‹ć Žćˆäž­æ–­ă™ă‚‹ - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67108864 - 16777216 - ç”»ćƒă‚’ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚č(ăƒ—ăƒ­ă‚°ăƒŹăƒƒă‚·ăƒ–)挖する - - - 1211912448 - 2 - - - - - 200 - 25 - - NO - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67108864 - 71303168 - æœ€é©ćŒ–ăƒŹăƒ™ăƒ« - - - - - - NO - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67108864 - 272629760 - ă‚€ăƒłă‚żăƒŒăƒŹăƒŒă‚čするべćźčé‡ăŻé€šćžžć€§ăăăȘă‚ŠăŸă™ - - LucidaGrande - 10 - 2843 - - - - - - NO - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67108864 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - NO - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67108864 - 272629760 - 24 ć›žè©ŠèĄŒ - - - - - - NO - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67108864 - 71303168 - 240 ć›žè©ŠèĄŒ - - - - - - NO - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67108864 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67108864 - 134217728 - - - - 4 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67108864 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - NO - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67108864 - 71303168 - æœ€é©ćŒ–ăƒŹăƒ™ăƒ« - - - - - - NO - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67108864 - 272629760 - 高速 - - - - - - NO - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67108864 - 71303168 - 狂的 - - - - - - NO - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67108864 - 138412032 - æ™źé€š - - - - - - NO - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67108864 - 138412032 - ćż…èŠä»„äžŠ - - - - - - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67108864 - 134217728 - - - - 3 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67108864 - 71303168 - æœ€ć€§ć“èłȘ - - - - - - NO - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67108864 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - LucidaGrande - 9 - 3614 - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - NO - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67371264 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - NO - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67108864 - 272629760 - 80% - - - - - - NO - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67108864 - 71303168 - 100% - - - - - - NO - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67108864 - 138412032 - 90% - - - - - - NO - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67108864 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67108864 - 134217728 - - - - 2 - -2038284288 - 33 - - - - - - 200 - 25 - - NO - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - - - {{0, 0}, {2560, 1578}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/ko.lproj/Credits.html b/imageoptim/ko.lproj/Credits.html new file mode 100644 index 00000000..7815ba20 --- /dev/null +++ b/imageoptim/ko.lproj/Credits.html @@ -0,0 +1,29 @@ +
    +

    ImageOptim by Kornel LesiƄski and contributors is a GUI for 3rd party utilities:

    + +

    ImageOptim can be redistributed and modified under GNU General Public License version 2 or later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/ko.lproj/Help/index.html b/imageoptim/ko.lproj/Help/index.html new file mode 100644 index 00000000..994452d1 --- /dev/null +++ b/imageoptim/ko.lproj/Help/index.html @@ -0,0 +1,77 @@ + + + + +Codestin Search App + + + + + + + + +

    ImageOptim

    + +

    ì–Žë–»êȌ ì‚Źìš©í•˜ë‚˜ìš”

    + +
      +
    1. ImageOptim 화멎 안에 PNG / JPEG 파음 또는 폎더넌 끌얎닀 놓윌섞요.
    2. + +
    3. ì™„ëŁŒ 될 때êčŒì§€ êž°ë‹€ëŠŹì„žìš”.
    4. + +
    5. ì™„ëŁŒ!
    6. +
    +

    ImageOptime의 Dock 아읎윘에 파음듀을 끌얎닀 놓을 수 있슔니닀.

    + +

    환êČœì„€ì • 변êČœí•˜ëŠ” ë°©ëČ•ì„ 배워뎅시닀..

    + +

    파음 ëŠŹìŠ€íŠžì˜ 아읎윘 ì„€ëȘ…

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkìŽëŻžì§€ê°€ ì„±êł”ì ìœŒëĄœ 씜적화 되었슔니닀.
    Green XìŽëŻž 씜적화 되얎 있얎, 더 읎상 ìŽëŻžì§€ë„Œ 씜적화 할 수 없슔니닀.
    Gray star파음의 씜적화가 진행 쀑입니닀.
    Gray dots닀넞 파음 씜적화 작업읎 ì™„ëŁŒë˜êž°ë„Œ êž°ë‹€ëŠŹëŠ” 쀑입니닀.
    Orange exclamation mark씜적화 작업 쀑에 ì—ëŸŹê°€ 발생했슔니닀. Console.app넌 싀행시쌜 읎유넌 ì°Ÿì•„ëłŽì„žìš”.
    +

    ì–Žë–»êȌ 동작 하나요.

    + +

    ImageOptim은 아래 응용 í”„ëĄœê·žëžšë“€ì„ 위한 ì• í”ŒëŠŹìŒ€ìŽì…˜(GUI)입니닀.

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • ê·žëŠŹêł  optionally PNGOUT.
    • +
    +

    ImageOptim은 위의 작업을 ìˆ˜í–‰í•˜êł  ìžë™ì ìœŒëĄœ 가임 작은 íŒŒìŒëĄœ 만듀얎쀍니닀.

    + + diff --git a/imageoptim/ko.lproj/Help/prefs.html b/imageoptim/ko.lproj/Help/prefs.html new file mode 100644 index 00000000..ef642df8 --- /dev/null +++ b/imageoptim/ko.lproj/Help/prefs.html @@ -0,0 +1,77 @@ + + + + +Codestin Search App + + + + + + +

    ImageOptim 환êČœì„€ì •

    +

    « ì†Œê°œíŽ˜ìŽì§€ëĄœ 읎동

    +

    음반 환êČœì„€ì •

    +
    +
    파음 권한, 속성 ê·žëŠŹêł  하드링크 유지하Ʞ
    +
    +

    같은 ìŽëŠ„ìœŒëĄœ 된 파음을 삭제 후 생성하는 êČƒìŽ 아니띌, 파음의 낎용을 ëźì–Žì”ë‹ˆë‹€. 귞렇Ʞ ë•ŒëŹžì— 폮더 위ìč˜, 대ìČŽ 읎늄, 파음 소유, 권한, 확임된 파음 속성 ëȘšë‘ê°€ 동음하êȌ 유지됩니닀.

    +

    또한, 권한을 유지하지 않Ʞ ë•ŒëŹžì— ìĄ°êžˆ 더 ëč ë„ŽêȌ 진행됩니닀.

    +
    +
    PNG: 임의의 ì •ëłŽ ëȘšë‘ 제거하Ʞ
    +
    +

    ì›č에서 쓰음 파음을 씜적화한닀멎 활성화하십시였. 만앜 íŠč정 메타데읎터넌 가진 PNG띌멎 ëč„활성화하멎 됩니닀.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    JPEG: 파음의 윔멘튞와 EXIF 마큏 제거하Ʞ
    +
    +

    색상 í”„ëĄœíŒŒìŒ, 녞출시간, GPS ìąŒí‘œ, ìčŽë©”띌 ëȘšëž, 파음 생성 때 ì‚Źìš©ëœ 소프튞웚얎의 읎늄 등의 ìŽëŻžì§€ 메타데읎터넌 제거합니닀. 메타데읎터는 JPEG 파음읎 1.3MB 볎닀 큏멎 절대 지워지지 않슔니닀.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    ë„ê”Ź

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    +
    씜대 품질
    +
    +

    만앜 100%로 섀정하멎, 씜적화는 손싀없읎 진행됩니닀.

    +

    만앜 êž°ìĄŽ 파음듀읎 더 높은 í’ˆì§ˆëĄœ 저임되었더띌도, 씜적화 품질을 100% ëŻžë§ŒìœŒëĄœ 섀정하멎 더 ë‚źì€ í’ˆì§ˆëĄœ 진행됩니닀.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    씜적화 유형
    +
    +

    PNGOUT은 맀우 íššêłŒì ìŽì§€ë§Œ 느늜니닀. 만앜 ì°žêž° 힘듀닀멎 더 ë‚źì€ ë‹šêł„ë„Œ ì‚Źìš©í•˜ì„žìš”.

    +
    +
    만앜 너묮 였랫동안 작업읎 진행되멎 쀑지시킔니닀.
    +
    +

    PNGOUT은 맀우 큰 ìŽëŻžì§€ë„Œ 씜적화하는데 많은시간읎 소요될 수도 있슔니닀. 읎 옔션은 1분읎 ì§€ë‚˜êł  PNGOUT을 êč”끔하êȌ 쀑지시킔니닀.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Optimisation level
    +
    +

    Number of different setting combinations tested. It rarely makes sense to try them all.

    +
    +
    Make images interlaced (progressive)
    +
    +

    파음을 ë¶€ë¶„ì ìœŒëĄœ 로드될 때 읞터레읎슀 된 ìŽëŻžì§€ëŠ” ëłŽêž° ìą‹ìŠ”ë‹ˆë‹€. 하지만 대êȌ 읞터레읎슀는 압출은 덜 íššêłŒì ìž…ë‹ˆë‹€.

    +

    읎 ìČŽíŹë°•ìŠ€ëŠ” 3가지 상태넌 가집니닀. 만앜 ìȎ큏되멎 ìŽëŻžì§€ë„Œ ìží„°ë ˆìŽìŠ€ë˜ë„ëĄ 만듀얎집니닀. í˜Œí•©ìœŒëĄœ 선택할 때에는 파음에 읞터레읎슀넌 변êČœí•˜ì§€ 않슔니닀. ë§ˆì§€ë§‰ìœŒëĄœ ìČŽíŹë„Œ 핎제하멎 파음에 읞터레읎슀넌 제거합니닀.

    +
    +
    +
    +
    +

    Gifsicle

    +

    ì”œêł ì˜ 압축을 위핎, ë‹č신은 GIF파음을 PNG로 ëł€í™˜í•Žì•Œ 합니닀.(ImageOptime가 ìžë™ì ìœŒëĄœ ê·žêČƒì„ í•ŽìŁŒì§€ 않슔니닀).

    +
    + + diff --git a/imageoptim/ko.lproj/ImageOptim.strings b/imageoptim/ko.lproj/ImageOptim.strings new file mode 100644 index 00000000..d2f37a51 --- /dev/null +++ b/imageoptim/ko.lproj/ImageOptim.strings @@ -0,0 +1,159 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "ì•žìœŒëĄœ ëȘšë‘ 가젞였Ʞ"; + +/* Menu Item "Window" */ +"19.title" = "ì°œ"; + +/* Menu Item "Minimize" */ +"23.title" = "ì°œ ë‹«êž°(M)"; + +/* Top-level Main Menu "Window" */ +"24.title" = "ì°œ"; + +/* Top-level Main Menu "Services" */ +"130.title" = "서ëč„슀"; + +/* Menu Item "Services" */ +"131.title" = "서ëč„슀"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ImageOptim 숚ꞰꞰ"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ImageOptim ìą…ëŁŒ"; + +/* Menu Item "Hide Others" */ +"145.title" = "Ʞ타 숚ꞰꞰ"; + +/* Menu Item "Show All" */ +"150.title" = "ëȘšë‘ ëłŽêž°"; + +/* Menu Item "Zoom" */ +"197.title" = "확대"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "파음"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "íŹêž°"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "ì••ì¶•ë„ "; + +/* Menu Item "About ImageOptim" */ +"361.title" = "ImageOptim에 대한 ì •ëłŽ"; + +/* Menu Item "Preferences
" */ +"363.title" = "환êČœ 섀정..."; + +/* Menu Item "Edit" */ +"375.title" = "펞집"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "펞집"; + +/* Menu Item "Select All" */ +"377.title" = "ëȘšë‘ 선택하Ʞ(A)..."; + +/* Menu Item "Undo" */ +"378.title" = "싀행 췚소(Z)"; + +/* Menu Item "Redo" */ +"384.title" = "닀시 싀행"; + +/* Menu Item "Cut" */ +"398.title" = "잘띌낎Ʞ(X)"; + +/* Menu Item "Copy" */ +"399.title" = "ëł”ì‚Ź(C)"; + +/* Menu Item "Paste" */ +"400.title" = "ë¶™ì—Źë„Łêž°(V)"; + +/* Menu Item "Delete" */ +"402.title" = "삭제"; + +/* Menu Item "File" */ +"429.title" = "파음"; + +/* Top-level Main Menu "File" */ +"430.title" = "파음"; + +/* Menu Item "Add Files
" */ +"437.title" = "파음 추가(O)..."; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "ë‹«êž°(W)"; + +/* Menu Item "Help" */ +"504.title" = "도움말"; + +/* Top-level Main Menu "Help" */ +"505.title" = "도움말"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim 도움말"; + +/* Window Title "About ImageOptim" */ +"526.title" = "ImageOptim에 대한 ì •ëłŽ"; + +/* Menu Item "Optimize Again" */ +"593.title" = "닀시 씜적화하Ʞ"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "업데읎튞 확읞"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "위 영역 위에 ìŽëŻžì§€ 파음듀을 끌얎닀 놓윌섞요"; + +/* Button "Again" */ +"635.title" = "닀시"; + +/* TextFieldCell "version" */ +"646.title" = "ëČ„ì „"; + +/* Menu Item "Tools" */ +"655.title" = "ë„ê”Ź"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "ë„ê”Ź"; + +/* Menu Item "Quick Look" */ +"708.title" = "í›‘ì–ŽëłŽêž°"; + +/* Menu Item "Delete Completed" */ +"721.title" = "삭제 ì™„ëŁŒ"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "씜적화 ì™„ëŁŒ"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim ì›čì‚ŹìŽíŠž"; + +/* Class = "NSMenu"; title = "ì»ŹëŸŒ ëłŽêž°"; ObjectID = "739"; */ +"739.title" = "ì»ŹëŸŒ ëłŽêž°"; + +/* Menu Item "Optimized Size" */ +"740.title" = "씜적화된 íŹêž°"; + +/* Menu Item "Savings" */ +"741.title" = "ì••ì¶•ë„ "; + +/* Menu Item "Best tool" */ +"747.title" = "ì”œêł ì˜ ë„ê”Ź"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "ì”œêł ì˜ ë„ê”Ź"; + +/* Menu Item "Original Size" */ +"791.title" = "ì›ëłž íŹêž°"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "ì›ëłž íŹêž°"; + +/* Menu Item "Show Columns" */ +"809.title" = "ì»ŹëŸŒ ëłŽêž°"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "ëł”ì‚Ź(C) Data URL"; + diff --git a/imageoptim/ko.lproj/Localizable.strings b/imageoptim/ko.lproj/Localizable.strings new file mode 100644 index 00000000..88ddbc86 --- /dev/null +++ b/imageoptim/ko.lproj/Localizable.strings @@ -0,0 +1,43 @@ +/* tooltip */ +"%@ failed to start" = "%@을 시작하지 ëȘ»í–ˆìŠ”니닀"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "환êČœì„€ì • 안에 있는 ëȘšë“  필요한 ë„ê”Źë“€ìŽ ëč„활성화되었슔니닀"; + +/* tooltip, generic loading error */ +"Can't open the file" = "메ëȘšëŠŹì— 파음을 맔핑할 수 없슔니닀"; + +/* undo command name */ +"Cut" = "잘띌낎Ʞ(X)"; + +/* tooltip */ +"File cannot be optimized any further" = "더 읎상 파음을 씜적화 할 수 없슔니닀"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "파음 유형은 PNG, GIF, JPEG 쀑 하나읎얎알 합니닀"; + +/* tooltip */ +"Inspecting file" = "파음을 정êȀ 쀑입니닀."; + +/* newly added to the queue */ +"New file" = "새 파음"; + +/* tooltip */ +"Optimized file could not be saved" = "씜적화된 파음은 저임될 수 없슔니닀"; + +/* tooltip */ +"Optimized successfully with %@" = "%@로 씜적화 ì„±êł”"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "%@ 절앜했슔니닀(전ìČŽ %@). 전ìČŽ %@ (파음 ë‹č %@)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "%@ 절앜했슔니닀(전ìČŽ %@). 평균 파음 ë‹č %@ (씜대 %@)"; + +/* command name, tooltip */ +"Started %@" = "%@로 시작했슔니닀"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "더 씜적화시킀Ʞ 위핎 êž°ë‹€ëŠŹëŠ” 쀑"; + diff --git a/imageoptim/ko.lproj/PrefsController.strings b/imageoptim/ko.lproj/PrefsController.strings new file mode 100644 index 00000000..708d02eb --- /dev/null +++ b/imageoptim/ko.lproj/PrefsController.strings @@ -0,0 +1,48 @@ +/* The first prefs tab (misc/general) */ +"167.label" = "음반"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "씜적화 레ëČš"; + +/* Title in box "Writing files to disk" */ +"280.title" = "ë””ìŠ€íŹì— 파음 ì“°êž°"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "파음 권한, 속성, 폮더 위ìč˜ ìœ ì§€í•˜êž°"; + +/* label in speed tab "Optimization level" */ +"818.title" = "씜적화 레ëČš"; + +/* "Fast" */ +"819.title" = "ëč ë„ŽêȌ"; + +/* "Insane" */ +"820.title" = "엄ìȭ나êȌ"; + +/* "Normal" */ +"821.title" = "볎톔"; + +/* "Extra" */ +"822.title" = "필요 읎상"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: 임의의 ì •ëłŽ ëȘšë‘ 제거하Ʞ"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "많은 ì›č 람띌우저에서는 감마 ì •ëłŽë„Œ íŹí•ší•˜ì§€ 않슔니닀."; + +/* label "JPEG quality" */ +"868.title" = "JPEG: 품질"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: 파음의 윔멘튞와 EXIF 마큏 제거하Ʞ"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata"; + +/* Header above list of tools to enable */ +"1107.title" = "활성화"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: 품질"; + diff --git a/imageoptim/log.h b/imageoptim/log.h new file mode 100644 index 00000000..f206b2b0 --- /dev/null +++ b/imageoptim/log.h @@ -0,0 +1,8 @@ +// +// log.h +// ImageOptim + +extern int hideLogs; + +#define IODebug(...) if (!hideLogs) NSLog(@"" __VA_ARGS__); +#define IOWarn(...) NSLog(@"" __VA_ARGS__); diff --git a/imageoptim/lt.lproj/Credits.html b/imageoptim/lt.lproj/Credits.html new file mode 100644 index 00000000..7815ba20 --- /dev/null +++ b/imageoptim/lt.lproj/Credits.html @@ -0,0 +1,29 @@ +
    +

    ImageOptim by Kornel LesiƄski and contributors is a GUI for 3rd party utilities:

    + +

    ImageOptim can be redistributed and modified under GNU General Public License version 2 or later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/lt.lproj/Help/index.html b/imageoptim/lt.lproj/Help/index.html new file mode 100644 index 00000000..6617c9e0 --- /dev/null +++ b/imageoptim/lt.lproj/Help/index.html @@ -0,0 +1,73 @@ + + + +Codestin Search App + + + + + +

    ImageOptim

    + +

    Kaip naudoti

    + +
      +
    1. Nuvilkite PNG ar JPEG failus ar aplankus į pagrindinį ImageOptim'o langą.
    2. + +
    3. Palaukite kol pabaigs.
    4. + +
    5. Nauda! (iĆĄ maĆŸĆł failĆł)
    6. +
    +

    Jƫs taip pat galite numesti failus ant ImageOptim'o Dock'o ikonos.

    + +

    SuĆŸinoti kaip keisti nustatymus.

    + +

    Ikonos failƳ lentelėje

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Ćœalia varnelėPaveikslėlis buvo sėkmingai optimizuotas.
    Ćœalias XViskas praėjo sklandĆŸiai, bet paveikslėlÄŻ neÄŻmanoma optimizuoti labiau.
    Pilka ĆŸvaigĆŸdėVyksta failo optimizacija.
    Pilki taơkiukaiFailas pridėtas į eilę ir optimizavimas prasidės kai susitvarkys su kitais failais.
    OranĆŸinis ĆĄauktukasOptimizacijos metu ÄŻvyko klaida. PaaiĆĄkinimus rasite paleidus Console.app.
    +

    Kaip tai veikia

    + +

    ImageOptim yra ơiƳ programƳ grafinė sąsaja (GUI):

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • ir pasirinktinai PNGOUT.
    • +
    +

    ImageOptim paleidĆŸia juos ir automatiĆĄkai pasirenka maĆŸiausią failą.

    + + diff --git a/imageoptim/lt.lproj/Help/prefs.html b/imageoptim/lt.lproj/Help/prefs.html new file mode 100644 index 00000000..0ed61431 --- /dev/null +++ b/imageoptim/lt.lproj/Help/prefs.html @@ -0,0 +1,75 @@ + + + +Codestin Search App + + + + + +

    ImageOptim nustatymai

    +

    « Atgal ÄŻ pradĆŸią

    +

    Bendri nustatymai

    +
    +
    Iơsaugoti failƳ teisęs, parametrus ir nuorodas
    +
    +

    Vietoj to kad iĆĄtrinti seną failą ir ÄŻraĆĄinėti naują tuo pačiu pavadinimu, tiesiog pakeičia seno failo turinÄŻ. Tai uĆŸtikrina kad visos nuorodos, santraukos, failo savininkai, leidimai ir iĆĄplėstiniai parametrai lieka nepasikeitę.

    +

    Ơiek tiek greičiau nesaugoti leidimƳ.

    +
    +
    PaĆĄalinti galimas santraukas
    +
    +

    Äźjunkite jeigu optimizuojate ĆŸiniatinkliui. IĆĄjunkite jeigu turite ypatingus PNG failus su papildomais meta duomenimis.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    IĆĄtrinti EXIF ĆŸymes iĆĄ failĆł
    +
    +

    PaĆĄalina paveikslėlio meta duomenys, tokius kaip spalvĆł profilis, iĆĄlaikymo trukmė, GPS koordinatės, fotoaparato modelis ir programinės ÄŻrangos naudotos sukĆ«rimui pavadinimas.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    +
    Aukơčiausia kokybė
    +
    +

    Jeigu nustatyta 100%, optimizacija bus lossless.

    +

    Betkas ĆŸemiau 100% duos ĆŸemesnes kokybės kokybės failus atrodančius lyg jie bĆ«tu iĆĄsaugoti su aukĆĄtesniais kokybės nustatymais.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Optimizacijos tipas
    +
    +

    PNGOUT labai efektyvus, bet labai lėtas. Jeigu esate nekantrus naudokite ĆŸemesnę kokybę.

    +
    +
    Nutraukti jeigu uĆŸtrunka per ilgai
    +
    +

    PNGOUT gali prireikti labai daug laiko optimizuojant didelis failus. Ơis nustatymas grakơčiai sutrugdys PNGOUT po vienos minutes.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Optimizacijos lygis
    +
    +

    Didelis kiekis nustatymƳ jau iơbandyta. Retai kada visu bandymas turi prasmės.

    +
    +
    Padaryti paveikslėlius supintais (progressive interlace)
    +
    +

    Supinti paveikslėliai atrodo geriau kai jie dalinai uĆŸkrauti, bet daĆŸniausiai supynimas neigiamai ÄŻtakoja kompresijos efektyvumui.

    +

    Ć i varnelė turi tris padėtis: jeigu paĆŸymėta, tai priverstinai supina paveikslėlis. Jeigu miĆĄriai, tai nekeis supynimo nustatymus. Jeigu nuimta, tai paĆĄalins supynimus iĆĄ failĆł.

    +
    +
    +
    +
    +

    Gifsicle

    +

    Geriausiam suspaudimui, reikėtu konvertuoti GIF failus ļ PNG (ImageOptim automatiơkai to ne daro).

    +
    + + diff --git a/imageoptim/lt.lproj/ImageOptim.strings b/imageoptim/lt.lproj/ImageOptim.strings new file mode 100644 index 00000000..c2bf34f0 --- /dev/null +++ b/imageoptim/lt.lproj/ImageOptim.strings @@ -0,0 +1,189 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "IĆĄvesti visus ÄŻ priekÄŻ"; + +/* Menu Item "Window" */ +"19.title" = "Langas"; + +/* Menu Item "Minimize" */ +"23.title" = "Sutraukti"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Langas"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "PagrindinisMeniu"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Tarnybos"; + +/* Menu Item "Services" */ +"131.title" = "Tarnybos"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Slėpti ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "IĆĄeiti iĆĄ ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Slėpti kitus"; + +/* Menu Item "Show All" */ +"150.title" = "Rodyti visus"; + +/* Menu Item "Zoom" */ +"197.title" = "Priartinimas"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Optimizavimui paruoĆĄtu failĆł sąraĆĄas"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Failas"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Dydis"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Failo dydis po optimizavimo"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Sąntaupos"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Apie ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Nustatymai..."; + +/* Menu Item "Edit" */ +"375.title" = "Redaguoti"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Redaguoti"; + +/* Menu Item "Select All" */ +"377.title" = "Pasirinkti visus"; + +/* Menu Item "Undo" */ +"378.title" = "AtĆĄaukti"; + +/* Menu Item "Redo" */ +"384.title" = "Pakartoti"; + +/* Menu Item "Cut" */ +"398.title" = "IĆĄkirpti"; + +/* Menu Item "Copy" */ +"399.title" = "Kopijuoti"; + +/* Menu Item "Paste" */ +"400.title" = "Äźterpti"; + +/* Menu Item "Delete" */ +"402.title" = "IĆĄtrinti"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Pridėti naujus failus ar aplankus"; + +/* Menu Item "File" */ +"429.title" = "Failas"; + +/* Top-level Main Menu "File" */ +"430.title" = "Failas"; + +/* Menu Item "Add Files
" */ +"437.title" = "Pridėti failus..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimizacijos statusas"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimizacijos statusas"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "UĆŸdaryti"; + +/* Menu Item "Help" */ +"504.title" = "Pagalba"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Pagalba"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim Pagalba"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Apie ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimizuoti vėl"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Patikrinti atnaujinimus..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Tempkite ir meskite paveikslėlius ÄŻ virĆĄutinÄŻ lauką"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Pridėti"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Paleisti optimizaciją vėl"; + +/* Button "Again" */ +"635.title" = "Vėl"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Statusas"; + +/* TextFieldCell "version" */ +"646.title" = "versija"; + +/* Menu Item "Tools" */ +"655.title" = "Äźrankiai"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Äźrankiai"; + +/* Menu Item "Quick Look" */ +"708.title" = "Greita perĆŸiĆ«ra"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Paveikslėlius mesti čia"; + +/* Menu Item "Delete Completed" */ +"721.title" = "IĆĄtrinti pabaigtus"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimizuoti optimizuotus"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim puslapis"; + +/* Menu Item "View Source" */ +"735.title" = "PerĆŸiurėti iĆĄeities kodą"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Optimizuotas dydis"; + +/* Menu Item "Savings" */ +"741.title" = "Sąntaupos"; + +/* Menu Item "Best tool" */ +"747.title" = "Geriausias ÄŻrankis"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Geriausias ÄŻrankis"; + +/* Menu Item "Original Size" */ +"791.title" = "Originalo dydis"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Originalo dydis"; + +/* Menu Item "Show Columns" */ +"809.title" = "Rodyti stulpelius"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopijuoti Data URL"; + diff --git a/imageoptim/lt.lproj/Localizable.strings b/imageoptim/lt.lproj/Localizable.strings new file mode 100644 index 00000000..722608d9 --- /dev/null +++ b/imageoptim/lt.lproj/Localizable.strings @@ -0,0 +1,46 @@ +/* tooltip */ +"%@ failed to start" = "Äźvyko klaida paleidĆŸiant %@"; + +/* undo command name */ +"Add" = "Pridėti"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Visi reikalingi ÄŻrankiai buvo atjungti nustatymuose"; + +/* tooltip, generic loading error */ +"Can't open the file" = "NeÄŻmanoma priskirti failo atmintyje"; + +/* undo command name */ +"Cut" = "IĆĄkirpti"; + +/* tooltip */ +"File cannot be optimized any further" = "Labiau optimizuoti failo neÄŻmanoma"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Failas nėra PNG, GIF ar JPEG"; + +/* tooltip */ +"Inspecting file" = "Tikrinam failą"; + +/* newly added to the queue */ +"New file" = "Naujas failas"; + +/* tooltip */ +"Optimized file could not be saved" = "NeÄŻmanoma iĆĄsaugoti optimizuoto failo"; + +/* tooltip */ +"Optimized successfully with %@" = "Sėkmingai optimizuota naudojant %@"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "IĆĄsaugota %@ iĆĄ %@. %@ viso (iki %@ vienam failui)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "IĆĄsaugota %@ iĆĄ %@. %@ vidutiniĆĄkai vienam failui (iki %@)"; + +/* command name, tooltip */ +"Started %@" = "Paleidom %@"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Laukiama optimizacijĆł pradĆŸios"; + diff --git a/imageoptim/lt.lproj/PrefsController.strings b/imageoptim/lt.lproj/PrefsController.strings new file mode 100644 index 00000000..8875ddcf --- /dev/null +++ b/imageoptim/lt.lproj/PrefsController.strings @@ -0,0 +1,45 @@ +/* Window title */ +"5.title" = "ImageOptim nustatymai"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Bendri"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimizavimo lygis"; + +/* Title in box "Writing files to disk" */ +"280.title" = "RaĆĄyti failus ÄŻ diską"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "IĆĄsaugoti failĆł teisęs, parametrus ir nuorodas"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimizavimo lygis"; + +/* "Fast" */ +"819.title" = "Greitai"; + +/* "Insane" */ +"820.title" = "BeprotiĆĄkai"; + +/* "Normal" */ +"821.title" = "Normaliai "; + +/* "Extra" */ +"822.title" = "Papildomai"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: PaĆĄalinti visas galimas santraukas"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "NarĆĄyklės reikalauja gamma santrumpĆł paĆĄalinimo."; + +/* label "JPEG quality" */ +"868.title" = "JPEG: Aukơčiausia kokybė"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: IĆĄvalyti EXIF ĆŸymes ir komentarus iĆĄ failĆł"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: Aukơčiausia kokybė"; + diff --git a/imageoptim/main.m b/imageoptim/main.m index 9ca08429..f6c98e73 100644 --- a/imageoptim/main.m +++ b/imageoptim/main.m @@ -2,10 +2,26 @@ // Created by porneL on 7.wrz.07. // +int quitWhenDone = 0; + +#import "log.h" #import -#import +@import Cocoa; +#import + +static int isLaunchedWithCliArguments(int argc, char *argv[]) { + // Unfortunately NSApplicationLaunchIsDefaultLaunchKey doesn't cover bare CLI launch + if (argc < 2) return 0; + for (int i = 0; i < argc; i++) { + if ('-' == argv[i][0]) { // Normal OS X launch sets -psn + return 0; + } + } + return 1; +} + +int main(int argc, char *argv[]) { + quitWhenDone = hideLogs = isLaunchedWithCliArguments(argc, argv); -int main(int argc, char *argv[]) -{ - return NSApplicationMain(argc, (const char **) argv); + return NSApplicationMain(argc, (const char **)argv); } diff --git a/imageoptim/makehelp.sh b/imageoptim/makehelp.sh new file mode 100755 index 00000000..3e3ae943 --- /dev/null +++ b/imageoptim/makehelp.sh @@ -0,0 +1,18 @@ +#!/bin/bash +shopt -s nullglob +LANG=$1 + +SRC=$LANG.lproj/Help/ +DST=$LANG.lproj/Help/Help.helpindex + +TMP=/tmp/helpindex-$LANG + +echo "Making $LANG to $DST" + +test -d "$TMP" || mkdir -p "$TMP" + +for i in ${SRC}*.html; do + tidy --tidy-mark no --show-errors 0 -q -utf8 -asxhtml < "$i" > "$TMP/`basename "$i"`"; +done; + +hiutil -C -ag -m 1 -v -s "$LANG" -f "$DST" "$TMP" diff --git a/imageoptim/minus.png b/imageoptim/minus.png deleted file mode 100644 index 8fe9a8d4..00000000 Binary files a/imageoptim/minus.png and /dev/null differ diff --git a/imageoptim/nl.lproj/Credits.html b/imageoptim/nl.lproj/Credits.html new file mode 100644 index 00000000..b87eadce --- /dev/null +++ b/imageoptim/nl.lproj/Credits.html @@ -0,0 +1,31 @@ +
    +

    ImageOptim door Kornel LesiƄski is een GUI voor losstaande programma’s:

    + +

    ImageOptim kan herverdeeld en gewijzigd worden volgens de +GNU General Public License, versie 2 of later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +

    Nederlandse vertaling door by Mathias Bynens.

    +
    diff --git a/imageoptim/nl.lproj/Credits.rtf b/imageoptim/nl.lproj/Credits.rtf deleted file mode 100644 index 5b7d401d..00000000 --- a/imageoptim/nl.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 door Kornel Lesi\uc0\u324 ski is een GUI voor losstaande programma\'92s:\ -\pard\tqc\tx200\tx420\pardeftab720\li400\fi-400 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} van Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} van Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} van Andrea Mazzoleni en Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} van Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} van Eddie Kohler,\ -{\listtext \'95 }en {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} van Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\sa240 -\cf0 ImageOptim kan herverdeeld en gewijzigd worden volgens de {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License, versie 2 of later}}. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -Nederlandse vertaling door by {\field{\*\fldinst{HYPERLINK "http://mathiasbynens.be/"}}{\fldrslt Mathias Bynens}}.} \ No newline at end of file diff --git a/imageoptim/nl.lproj/Help/Help.helpindex b/imageoptim/nl.lproj/Help/Help.helpindex deleted file mode 100644 index e36bad47..00000000 Binary files a/imageoptim/nl.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/nl.lproj/Help/index.html b/imageoptim/nl.lproj/Help/index.html index 0e3284ff..8d67322b 100644 --- a/imageoptim/nl.lproj/Help/index.html +++ b/imageoptim/nl.lproj/Help/index.html @@ -1,77 +1,66 @@ - - + + - - - Codestin Search App - - - - - - - + +Codestin Search App + + + - - main -

    ImageOptim

    + + + +

    ImageOptim

    Hoe te gebruiken

      -
    1. Sleep PNG- of JPEG-bestanden of mappen naar het hoofdscherm van ImageOptim.
    2. +
    3. Sleep PNG- of JPEG-bestanden of mappen naar het hoofdscherm van ImageOptim.
    4. Wacht totdat de optimalisatie voltooid is.
    5. VoilĂ , de bestanden zijn compacter in bestandsgrootte!
    - -

    Het is ook mogelijk om bestanden of mappen naar het ImageOptim-icoon in je Dock te slepen.

    +

    Het is ook mogelijk om bestanden of mappen naar het ImageOptim-icoon in je Dock te slepen.

    Voorkeuren aanpassen.

    Icoontjes in de bestandstabel

    - - + + - - - + + - - - + + - - - + + - - - + + -
    Groene checkmark
    Groene checkmark Het optimaliseren van de afbeelding is geslaagd.
    Groene X
    Groene X De afbeelding kon niet verder geoptimaliseerd worden.
    Grijze ster
    Grijze ster Dit bestand wordt momenteel geoptimaliseerd.
    Grijze bolletjes
    Grijze bolletjes Het bestand staat in de wachtrij De optimalisatie zal beginnen zodra de andere bestanden geoptimaliseerd zijn..
    Oranje uitroepingsteken
    Oranje uitroepingsteken Er ging iets mis tijdens de optimalisatie. Voor meer info over wat er precies fout liep, open Console.app.
    - -

    Hoe werkt het?

    + +

    Hoe werkt het?

    ImageOptim is een front-end (GUI) voor volgende applicaties:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -79,11 +68,10 @@

      Hoe werkt het?

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • en eventueel PNGOUT.
    - -

    ImageOptim laat deze programma’s los op de gekozen bestanden, en selecteert vervolgens automatisch het kleinste resulterende bestand.

    +

    ImageOptim laat deze programma’s los op de gekozen bestanden, en selecteert vervolgens automatisch het kleinste resulterende bestand.

    diff --git a/imageoptim/nl.lproj/Help/prefs.html b/imageoptim/nl.lproj/Help/prefs.html index 98f58d75..6c4a59ad 100644 --- a/imageoptim/nl.lproj/Help/prefs.html +++ b/imageoptim/nl.lproj/Help/prefs.html @@ -1,110 +1,77 @@ - - + + + + Codestin Search App - - - - - -general -

    ImageOptim Voorkeuren

    -

    « Terug naar begin

    -

    Normaal gezien is het niet nodig om deze te wijzigen.

    -

    Algemene voorkeuren

    -
    -
    Behoud bestandspermissies, -eigenschappen en hardlinks
    -
    -

    I.p.v. het oude bestand te verwijderen en een nieuw bestand weg te schrijven met dezelfde naam, kan je met deze optie gewoon de inhoud van het oude bestand overschrijven. Op deze manier zullen alle hardlinks, aliases, bestandseigenaars, permissies en andere bestandseigenschappen ongewijzigd blijven. -

    Het is iets sneller om deze optie niet in te schakelen. -

    -
    Maak een backup van het originele bestand alvorens op te slaan
    -

    Zal een kopie van het bestand wegschrijven met ~ voor de naam. Hierdoor zal de optimalisatie iets trager verlopen, en wordt je harde schijf vervuild met backup-bestanden.

    -
    Verwijder optionele chunks
    -

    Vink dit aan indien je optimaliseert voor gebruik op websites. Schakel dit uit indien je speciale PNGs met extra metadata gebruikt.

    -
    Verwijder EXIF-gegevens uit bestanden
    -

    Verwijdert metadata uit de afbeelding, zoals de naam van het bewerkingsprogramma of het cameramodel waarmee het bestand gemaakt is.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Ingeschakeld
    -

    Indien ingeschakeld, zal ImageOptim JPEG-bestanden trachten te optimaliseren.

    - + + + +

    ImageOptim Voorkeuren

    +

    « Terug naar begin

    +

    Algemene voorkeuren

    +
    +
    Behoud bestandspermissies, -eigenschappen en hardlinks
    +
    +

    I.p.v. het oude bestand te verwijderen en een nieuw bestand weg te schrijven met dezelfde naam, kan je met deze optie gewoon de inhoud van het oude bestand overschrijven. Op deze manier zullen alle hardlinks, aliases, bestandseigenaars, permissies en andere bestandseigenschappen ongewijzigd blijven.

    +

    Het is iets sneller om deze optie niet in te schakelen.

    +
    +
    Maak een backup van het originele bestand alvorens op te slaan
    +
    +

    Vink dit aan indien je optimaliseert voor gebruik op websites. Schakel dit uit indien je speciale PNGs met extra metadata gebruikt.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    Verwijder EXIF-gegevens uit bestanden
    +
    +

    Verwijdert metadata uit de afbeelding, zoals de naam van het bewerkingsprogramma of het cameramodel waarmee het bestand gemaakt is.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    Beste kwaliteit
    -

    Wanneer dit op 100% staat, zal de optimalisatie lossless zijn.

    -

    Alles onder 100% kan in een lagere bestandskwaliteit dan het oorspronkelijke bestand resulteren.

    - -
    -
    "../../style.cs -
    -pngout -

    PNGOUT

    -
    -
    Ingeschakeld
    -

    Indien ingeschakeld, zal ImageOptim PNG-bestanden trachten te optimaliseren via PNGOUT. -

    PNGOUT wordt niet bij ImageOptim geleverd, omdat de maker ervan herverdeling ervan niet toestaat. Je kan het wel zelf downloaden.

    - - -
    -
    Optimalisatie-type
    -

    PNGOUT is zeer effectief, maar erg traag. Stel een laag niveau in als je ongeduldig bent.

    - -
    Onderbreek optimalisatie wanneer het te lang duurt
    -

    PNGOUT heeft soms enorm veel tijd nodig om afbeeldingen te optimaliseren. Deze optie onderbreekt PNGOUT na 1 minuut.

    - -
    +
    +

    Wanneer dit op 100% staat, zal de optimalisatie lossless zijn.

    +

    Alles onder 100% kan in een lagere bestandskwaliteit dan het oorspronkelijke bestand resulteren.

    +
    +
    -
    -advpng -

    AdvPNG

    -
    -
    Ingeschakeld
    -

    Indien ingeschakeld, zal ImageOptim trachten om PNG-bestanden te optimaliseren via AdvPNG.

    - - -
    -
    Optimalisatie-niveau
    -
    AdvPNG is vrij snel. Normaal gezien kan je zonder veel problemen het hoogste niveau gebruiken.
    -
    +
    +

    PNGOUT

    +
    +
    Optimalisatie-type
    +
    +

    PNGOUT is zeer effectief, maar erg traag. Stel een laag niveau in als je ongeduldig bent.

    +
    +
    Onderbreek optimalisatie wanneer het te lang duurt
    +
    +

    PNGOUT heeft soms enorm veel tijd nodig om afbeeldingen te optimaliseren. Deze optie onderbreekt PNGOUT na 1 minuut.

    +
    +
    -
    -optipng -

    OptiPNG

    -
    -
    Ingeschakeld
    -

    Indien ingeschakeld, zal ImageOptim proberen om PNG-bestanden te optimaliseren via OptiPNG.

    - - -
    -
    Optimalisatie-niveau
    -

    Aantal verschillende geteste instellingscombinaties. Het is zelden nuttig om deze allemaal te proberen.

    - -
    Pas interlacing (progressief) toe
    -

    Afbeeldingen met interlacing zien er beter uit wanneer ze nog maar gedeeltelijk geladen zijn, maar doorgaans is de compressie dan minder efficiënt.

    -

    Er zijn drie mogelijkheden: indien ingeschakeld, zullen afbeeldingen geĂŻnterlaced worden. Wanneer uitgeschakeld, wordt interlacing uit bestanden verwijderd. Wanneer gemixt, blijft de originele interlacing-instelling van het bestand ongewijzigd.

    -
    -
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Ingeschakeld
    -

    Indien ingeschakeld, zal ImageOptim Gifsicle gebruiken om GIF-bestanden te optimaliseren. - - -

    GIF-bestanden zullen automatisch interlacing of non-interlacing krijgen, wat het kleinst van de twee is. Bestandscommentaren zullen verwijderd worden.

    -

    Merk op dat Gifsicle best werkt met geanimeerde GIFs. Niet-geanimeerde GIFs kunnen zelden geoptimaliseerd worden.

    - -

    Voor de beste compressie, kan je GIF-bestanden omzetten naar PNGs. (ImageOptim doet dit niet automatisch).

    +
    +

    OxiPNG

    +
    +
    Optimalisatie-niveau
    +
    +

    Aantal verschillende geteste instellingscombinaties. Het is zelden nuttig om deze allemaal te proberen.

    +
    +
    Pas interlacing (progressief) toe
    +
    +

    Afbeeldingen met interlacing zien er beter uit wanneer ze nog maar gedeeltelijk geladen zijn, maar doorgaans is de compressie dan minder efficiënt.

    +

    Er zijn drie mogelijkheden: indien ingeschakeld, zullen afbeeldingen geĂŻnterlaced worden. Wanneer uitgeschakeld, wordt interlacing uit bestanden verwijderd. Wanneer gemixt, blijft de originele interlacing-instelling van het bestand ongewijzigd.

    +
    +
    +
    +

    Gifsicle

    +

    Voor de beste compressie, kan je GIF-bestanden omzetten naar PNGs. (ImageOptim doet dit niet automatisch).

    +
    + + diff --git a/imageoptim/nl.lproj/ImageOptim.strings b/imageoptim/nl.lproj/ImageOptim.strings new file mode 100644 index 00000000..b9a57fcc --- /dev/null +++ b/imageoptim/nl.lproj/ImageOptim.strings @@ -0,0 +1,147 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Breng alle naar voor"; + +/* Menu Item "Window" */ +"19.title" = "Venster"; + +/* Menu Item "Minimize" */ +"23.title" = "Verberg"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Venster"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "Hoofdmenu"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Voorzieningen"; + +/* Menu Item "Services" */ +"131.title" = "Voorzieningen"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Verberg ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Stop ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Verberg andere"; + +/* Menu Item "Show All" */ +"150.title" = "Toon alles"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lijst met te optimaliseren bestanden"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Bestand"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Grootte"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Geoptimaliseerd"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Over ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Voorkeuren
"; + +/* Menu Item "Edit" */ +"375.title" = "Wijzig"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Wijzig"; + +/* Menu Item "Select All" */ +"377.title" = "Selecteer alles"; + +/* Menu Item "Undo" */ +"378.title" = "Herstel"; + +/* Menu Item "Redo" */ +"384.title" = "Opnieuw"; + +/* Menu Item "Cut" */ +"398.title" = "Knip"; + +/* Menu Item "Copy" */ +"399.title" = "Kopieer"; + +/* Menu Item "Paste" */ +"400.title" = "Plak"; + +/* Menu Item "Delete" */ +"402.title" = "Verwijder"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Voeg nieuwe bestanden of mappen toe"; + +/* Menu Item "File" */ +"429.title" = "Archief"; + +/* Top-level Main Menu "File" */ +"430.title" = "Archief"; + +/* Menu Item "Add Files
" */ +"437.title" = "Bestanden toevoegen
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimalisatie-status"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Sluit venster"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Over ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Opnieuw optimaliseren"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Controleer op updates
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Sleep afbeeldingen op bovenstaande tabel"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Voeg toe"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Voer optimalisaties opnieuw uit"; + +/* Button "Again" */ +"635.title" = "Opnieuw"; + +/* Menu Item "Tools" */ +"655.title" = "Gereedschappen"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Gereedschappen"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Grootte"; + +/* Menu Item "Savings" */ +"741.title" = "Geoptimaliseerd"; + +/* Menu Item "Best tool" */ +"747.title" = "Gereedschappen"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Gereedschappen"; + +/* Menu Item "Original Size" */ +"791.title" = "Grootte (original)"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Grootte (original)"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Kwaliteit: 100%"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopieer Data URL"; + diff --git a/imageoptim/nl.lproj/Localizable.strings b/imageoptim/nl.lproj/Localizable.strings old mode 100755 new mode 100644 index c6ae6941..4de66dc7 --- a/imageoptim/nl.lproj/Localizable.strings +++ b/imageoptim/nl.lproj/Localizable.strings @@ -1,14 +1,40 @@ +/* tooltip */ +"%@ failed to start" = "%@ kon niet starten"; + +/* undo command name */ +"Add" = "Voeg toe"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Alle benodigde programma’s zijn uitgeschakeld via Voorkeuren"; -"Can't map file into memory" = "Het bestand kon niet in het geheugen ingelezen worden"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Het bestand kon niet in het geheugen ingelezen worden"; + +/* undo command name */ +"Cut" = "Knip"; + +/* tooltip */ "File cannot be optimized any further" = "Het bestand kan niet verder geoptimaliseerd worden"; + +/* tooltip */ "File is neither PNG, GIF nor JPEG" = "Het bestand is noch PNG noch JPEG"; + +/* tooltip */ "Inspecting file" = "Bezig met analyseren van bestand"; + +/* newly added to the queue */ "New file" = "Nieuw bestand"; + +/* tooltip */ "Optimized file could not be saved" = "Het geoptimaliseerde bestand kon niet bewaard worden"; + +/* tooltip */ "Optimized successfully with %@" = "De optimalisatie is geslaagd (%@)"; -"Size of optimized file is 0" = "De grootte van het geoptimaliseerde bestand is 0"; + +/* command name, tooltip */ "Started %@" = "%@ gestart"; -"Waiting in queue" = "In de wachtrij"; -"Waiting to be optimized" = "Klaar om geoptimaliseerd te worden"; -"Waiting to start more optimizations" = "Wachten op verdere optimalisaties"; -"%@ failed to start" = "%@ kon niet starten"; \ No newline at end of file + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Wachten op verdere optimalisaties"; + diff --git a/imageoptim/nl.lproj/MainMenu.xib b/imageoptim/nl.lproj/MainMenu.xib deleted file mode 100644 index e63978aa..00000000 --- a/imageoptim/nl.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Optimalisatie-status - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Bestand - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Grootte (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Grootte - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Geoptimaliseerd - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Gereedschappen - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Sleep afbeeldingen op bovenstaande tabel - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Voeg toe - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{418, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{442, 6}, {87, 25}} - - YES - - 67239424 - 134217728 - Opnieuw - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Voer optimalisaties opnieuw uit - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - Hoofdmenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Over ImageOptim - - 2147483647 - - - - - - Controleer op updates
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Voorkeuren
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Voorzieningen - - 1048576 - 2147483647 - - - submenuAction: - - Voorzieningen - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Verberg ImageOptim - h - 1048576 - 2147483647 - - - - - - Verberg andere - h - 1572864 - 2147483647 - - - - - - Toon alles - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Stop ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Archief - - 1048576 - 2147483647 - - - submenuAction: - - Archief - - - - Bestanden toevoegen
 - o - 1048576 - 2147483647 - - - - - - Opnieuw optimaliseren - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Sluit venster - w - 1048576 - 2147483647 - - - - - - - - - Wijzig - - 1048576 - 2147483647 - - - submenuAction: - - Wijzig - - - - Herstel - z - 1048576 - 2147483647 - - - - - - Opnieuw - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Knip - x - 1048576 - 2147483647 - - - - - - Kopieer - c - 1048576 - 2147483647 - - - - - - Plak - v - 1048576 - 2147483647 - - - - - - Verwijder - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Selecteer alles - a - 1048576 - 2147483647 - - - - - - - - - Gereedschappen - - 2147483647 - - - submenuAction: - - Gereedschappen - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Venster - - 1048576 - 2147483647 - - - submenuAction: - - Venster - - - - Verberg - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Breng alle naar voor - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Grootte (original) - - 2147483647 - - - - - - Grootte - - 2147483647 - 1 - - - - - - Geoptimaliseerd - - 2147483647 - 1 - - - - - - Gereedschappen - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Help - - 1048576 - 2147483647 - - - submenuAction: - - Help - - - - ImageOptim Help - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Over ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - version - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Grootte - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Lijst met te optimaliseren bestanden - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Voeg nieuwe bestanden of mappen toe - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/nl.lproj/PrefsController.strings b/imageoptim/nl.lproj/PrefsController.strings new file mode 100644 index 00000000..e9ec5e15 --- /dev/null +++ b/imageoptim/nl.lproj/PrefsController.strings @@ -0,0 +1,57 @@ +/* Window title */ +"5.title" = "ImageOptim Voorkeuren"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Algemeen"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimalisatie-niveau"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Kwaliteit"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Bezig met het wegschrijven van de bestanden"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Behoud bestandspermissies, -attributen en hardlinks"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimalisatie-niveau"; + +/* "Fast" */ +"819.title" = "Snel"; + +/* "Insane" */ +"820.title" = "Hyper"; + +/* "Normal" */ +"821.title" = "Normaal"; + +/* Checkbox in Preferences */ +"854.title" = "Verwijder PNG-metadata (gamma, kleurprofielen, optionele chunks)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Webbrowsers vereisen dat gamma verwijderd wordt"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: kwaliteit"; + +/* Checkbox in Preferences */ +"911.title" = "Verwijder JPEG-metadata (EXIF, kleurprofielen, GPS, rotatie, etc.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata en kleurenprofielen"; + +/* Header above list of tools to enable */ +"1107.title" = "Ingeschakeld"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Bewaren naar netwerkschijven gaat sneller wanneer de permissies niet behouden worden"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Niet aan te raden indien je ingesloten copyright-informatie wil behouden"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: kwaliteit"; + diff --git a/imageoptim/nl.lproj/PrefsController.xib b/imageoptim/nl.lproj/PrefsController.xib deleted file mode 100644 index db1010d1..00000000 --- a/imageoptim/nl.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim Voorkeuren - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Behoud bestandspermissies, -attributen en hardlinks - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Maak een backup van de originele bestanden alvorens op te slaan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Bezig met het wegschrijven van de bestanden - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Verwijder alle optionele chunks - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Webbrowsers vereisen dat gamma verwijderd wordt - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Verwijder EXIF-data en commentaren uit bestanden - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Ingeschakeld - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - Algemeen - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimalisatie-type - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Simpel - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Extreem - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intensief - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - Langste overeenkomst - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Probeer verscheidene filters - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Onderbreek wanneer de uitvoering te lang duurt - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Pas interlacing (progressief) toe - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Optimalisatie-niveau - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Bestanden met interlacing zijn meestal groter - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 trials - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 trials - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimalisatie-niveau - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Snel - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Hyper - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normaal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Beste kwaliteit - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/no.lproj/Credits.html b/imageoptim/no.lproj/Credits.html new file mode 100644 index 00000000..371c318e --- /dev/null +++ b/imageoptim/no.lproj/Credits.html @@ -0,0 +1,32 @@ +
    +

    ImageOptim av Kornel LesiƄski er et grafisk grensesnitt for fþlgende tredjepartsverktþy:

    + +

    ImageOptim kan fritt redistributes og endres under +GNU General Public License versjon 2 eller senere. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +

    +Oversatt til norsk av Henrik Helmers +

    diff --git a/imageoptim/no.lproj/Credits.rtf b/imageoptim/no.lproj/Credits.rtf deleted file mode 100644 index c360ea5e..00000000 --- a/imageoptim/no.lproj/Credits.rtf +++ /dev/null @@ -1,24 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf100 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 av Kornel Lesi\uc0\u324 ski er et grafisk grensesnitt for f\'f8lgende tredjepartsverkt\'f8y:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} av Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} av Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} av Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} av Timo Kokkonen,\ -{\listtext \'95 }og {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} av Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim kan fritt redistributes og endres under {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License versjon 2 eller senere}}. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -Oversatt til norsk av Henrik Helmers} \ No newline at end of file diff --git a/imageoptim/no.lproj/Help/Help.helpindex b/imageoptim/no.lproj/Help/Help.helpindex deleted file mode 100644 index 0a8d2a35..00000000 Binary files a/imageoptim/no.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/no.lproj/Help/index.html b/imageoptim/no.lproj/Help/index.html index dde5c5db..b5f6b939 100644 --- a/imageoptim/no.lproj/Help/index.html +++ b/imageoptim/no.lproj/Help/index.html @@ -1,78 +1,64 @@ - - - + + - - - Codestin Search App - - - - - - - + +Codestin Search App + + + + - main - -

    ImageOptim

    +

    ImageOptim

    Hvordan bruke

      -
    1. Dra og slipp PNG- eller JPEG-filer eller mapper pÄ ImageOptim.
    2. +
    3. Dra og slipp PNG- eller JPEG-filer eller mapper pÄ ImageOptim.
    4. Vent til bildene er behandlet.
    5. Suksess!
    - -

    Du kan ogsÄ slippe filer pÄ Dock-ikonet til ImageOptim, eller bruke stÞttede filers hÞyreklikkmeny.

    +

    Du kan ogsÄ slippe filer pÄ Dock-ikonet til ImageOptim, eller bruke stÞttede filers hÞyreklikkmeny.

    LĂŠr mer om Valg.

    Ikonbruk i tabellen

    - - + + - - - + + - - - + + - - - + + - - - + + -
    GrĂžnn V
    GrĂžnn V Bildet har blitt optimalisert, og stĂžrrelsen redusert.
    GrĂžnn X
    GrĂžnn X Alt gikk som det skulle, men bildet kunne ikke gjĂžres mindre.
    GrÄ spinner
    GrÄ spinner Filen optimaliseres nÄ.
    GrÄ prikker
    GrÄ prikker Filen ligger i kÞen.
    Oransje utropstegn
    Oransje utropstegn Det oppstod en feil under optimaliseringen. Du kan finne flere detaljer i Console.app.
    - -

    Hvordan det virker

    + +

    Hvordan det virker

    ImageOptim er et grafisk grensesnitt for disse verktĂžyene:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +66,10 @@

      Hvordan det virker

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • og PNGOUT, dersom det er installert.
    - -

    ImageOptim kjĂžrer dem alle, og velger den minste filen blant den de produserer.

    +

    ImageOptim kjĂžrer dem alle, og velger den minste filen blant den de produserer.

    diff --git a/imageoptim/no.lproj/Help/prefs.html b/imageoptim/no.lproj/Help/prefs.html index 41886ff7..82012424 100644 --- a/imageoptim/no.lproj/Help/prefs.html +++ b/imageoptim/no.lproj/Help/prefs.html @@ -1,106 +1,75 @@ - - -Codestin Search App + + + +Codestin Search App - - - - - -general -

    Valg for ImageOptim

    -

    « Tilbake til innholdsfortegnelsen

    -

    Du trenger ikke Ă„ endre noen av disse.

    -

    Generelle valg

    -
    -
    Preserve file permissions, attributes and hardlinks
    -
    -

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. -

    It's slightly faster not to preserve permissions. -

    -
    Backup original files before saving
    -

    Will write copy of a file with ~ appended to its name. This makes optimization a bit slower and litters your disk with backup files.

    - -
    Remove optional chunks
    -

    Keep it on if you optimize for web. Disable if you have special PNGs with extra metadata.

    -
    Strip EXIF markers from files
    -

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. Metadata is never removed from JPEG files larger than 1.3MB.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize JPEG files.

    - -
    Maximum quality
    -

    If set to 100%, optimization will be lossless.

    -

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    + -
    -
    -
    -pngout -

    PNGOUT

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using PNGOUT. -

    PNGOUT is not bundled with ImageOptim. It's a great tool, but and author of PNGOUT forbids redistribution of it, so you have to download PNGOUT yourself.

    - -
    -
    Optimization type
    -

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    - -
    Interrupt if takes too long
    -

    PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute.

    - -
    -
    -
    -advpng -

    AdvPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using AdvPNG tool.

    - -
    -
    Optimization level
    -
    AdvPNG is relatively fast, so you can use maximum level.
    -
    + +

    Valg for ImageOptim

    +

    « Tilbake til innholdsfortegnelsen

    +

    Generelle valg

    +
    +
    Bevar rettigheter, attributter og harde lenker
    +
    +

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same.

    +

    It's slightly faster not to preserve permissions.

    +
    +
    Strip PNG metadata (gamma, color profiles, optional chunks)
    +
    +

    PNG files can have different brightness and saturation in different browsers, because not all browsers support gamma correction and color profiles features equally. Removal of this information makes PNG color more consistent across browsers and reduces file size.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    Strip JPEG metadata (EXIF, color profiles, GPS, rotation, etc.)
    +
    +

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    +
    Maksimal kvalitet
    +
    +

    If set to 100%, optimization will be lossless.

    +

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    +
    +
    -
    -optipng -

    OptiPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using OptiPNG tool.

    - -
    -
    Optimization level
    -

    Number of different setting combinations tested. It rarely makes sense to try them all.

    - -
    Make images interlaced (progressive)
    -

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    -

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    -
    +
    +

    PNGOUT

    +
    +
    Type optimalisering
    +
    +

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    +
    +
    Interrupt if takes too long
    +
    +

    PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute.

    +
    +
    -
    -gifsicle -

    Gifsicle

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize GIF files using Gifsicle. - -

    GIF files will be changed to interlaced or non-interlaced automatically, whichever is smaller. In-file comments will be removed.

    -

    Please note that Gifsicle works best with animated GIFs and non-animated GIFs rarely can be optimized

    - -

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    -
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    +
    +

    OxiPNG

    +
    +
    Optimaliseringsgrad
    +
    +

    Number of different setting combinations tested. It rarely makes sense to try them all.

    +
    +
    Lagre bilder i interlacet format
    +
    +

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    +

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    +
    +
    +
    +

    Gifsicle

    +

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    +
    + + diff --git a/imageoptim/no.lproj/ImageOptim.strings b/imageoptim/no.lproj/ImageOptim.strings new file mode 100644 index 00000000..d66912d4 --- /dev/null +++ b/imageoptim/no.lproj/ImageOptim.strings @@ -0,0 +1,165 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Legg alle Ăžverst"; + +/* Menu Item "Window" */ +"19.title" = "Vindu"; + +/* Menu Item "Minimize" */ +"23.title" = "Minimer"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Vindu"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "Meny"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Tjenester"; + +/* Menu Item "Services" */ +"131.title" = "Tjenester"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Skjul ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Avslutt ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Skjul andre"; + +/* Menu Item "Show All" */ +"150.title" = "Vis alle"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Liste av filer til optimalisering"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Fil"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "StĂžrrelse"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "FilstĂžrrelse etter optimalisering"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "FilstĂžrrelse etter optimalisering"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Besparelser"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Om ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Valg
"; + +/* Menu Item "Edit" */ +"375.title" = "Rediger"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Rediger"; + +/* Menu Item "Select All" */ +"377.title" = "Velg alle"; + +/* Menu Item "Undo" */ +"378.title" = "Angre"; + +/* Menu Item "Redo" */ +"384.title" = "GjĂžr pĂ„ nytt"; + +/* Menu Item "Cut" */ +"398.title" = "Klipp ut"; + +/* Menu Item "Copy" */ +"399.title" = "Kopier"; + +/* Menu Item "Paste" */ +"400.title" = "Lim inn"; + +/* Menu Item "Delete" */ +"402.title" = "Slett"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Legg til nye filer eller mapper"; + +/* Menu Item "File" */ +"429.title" = "Fil"; + +/* Top-level Main Menu "File" */ +"430.title" = "Fil"; + +/* Menu Item "Add Files
" */ +"437.title" = "Legg til
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimaliseringsstatus"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Lukk"; + +/* Menu Item "Help" */ +"504.title" = "Hjelp"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Hjelp"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Hjelp for ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Om ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimaliser igjen"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Se etter oppdateringer
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Dra og slipp filer i tabellen over"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Legg til"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "KjĂžr optimalisering igjen"; + +/* Button "Again" */ +"635.title" = "Igjen"; + +/* TextFieldCell "version" */ +"646.title" = "versjon"; + +/* Menu Item "Tools" */ +"655.title" = "VerktĂžy"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "VerktĂžy"; + +/* Menu Item "Optimized Size" */ +"740.title" = "StĂžrrelse"; + +/* Menu Item "Savings" */ +"741.title" = "Besparelser"; + +/* Menu Item "Best tool" */ +"747.title" = "VerktĂžy"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "VerktĂžy"; + +/* Menu Item "Original Size" */ +"791.title" = "StĂžrrelse (original)"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "StĂžrrelse (original)"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Kvalitet: 100%"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopier Data URL"; + diff --git a/imageoptim/no.lproj/Localizable.strings b/imageoptim/no.lproj/Localizable.strings index 90b9ce20..513ccbc7 100644 --- a/imageoptim/no.lproj/Localizable.strings +++ b/imageoptim/no.lproj/Localizable.strings @@ -1,14 +1,40 @@ +/* tooltip */ +"%@ failed to start" = "%@ kunne ikke startes"; + +/* undo command name */ +"Add" = "Legg til"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Alle nĂždvendige verktĂžy er slĂ„tt av i Valg"; -"Can't map file into memory" = "Kan ikke laste fil til minnet"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Kan ikke laste fil til minnet"; + +/* undo command name */ +"Cut" = "Klipp ut"; + +/* tooltip */ "File cannot be optimized any further" = "Filen kan ikke optimaliseres videre"; + +/* tooltip */ "File is neither PNG, GIF nor JPEG" = "Filen er verken en PNG eller JPEG"; + +/* tooltip */ "Inspecting file" = "Inspiserer fil"; + +/* newly added to the queue */ "New file" = "Ny fil"; + +/* tooltip */ "Optimized file could not be saved" = "Optimalisert fil kunne ikke lagres"; + +/* tooltip */ "Optimized successfully with %@" = "Vellykket optimalisering med %@"; -"Size of optimized file is 0" = "StĂžrrelsen pĂ„ den optimaliserte filen er 0"; + +/* command name, tooltip */ "Started %@" = "Bearbeider %@"; -"Waiting in queue" = "Ligger i kĂž"; -"Waiting to be optimized" = "Venter pĂ„ Ă„ bli optimalisert"; -"Waiting to start more optimizations" = "Venter med Ă„ starte ytterligere optimalisering"; -"%@ failed to start" = "%@ kunne ikke startes"; \ No newline at end of file + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Venter med Ă„ starte ytterligere optimalisering"; + diff --git a/imageoptim/no.lproj/MainMenu.xib b/imageoptim/no.lproj/MainMenu.xib deleted file mode 100644 index a3804210..00000000 --- a/imageoptim/no.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Optimaliseringsstatus - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Fil - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - StĂžrrelse (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - StĂžrrelse - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Besparelser - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - VerktĂžy - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Dra og slipp filer i tabellen over - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Legg til - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{434, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{458, 6}, {71, 25}} - - YES - - 67239424 - 134217728 - Igjen - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - KjĂžr optimalisering igjen - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - Meny - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Om ImageOptim - - 2147483647 - - - - - - Se etter oppdateringer
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Valg
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Tjenester - - 1048576 - 2147483647 - - - submenuAction: - - Tjenester - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Skjul ImageOptim - h - 1048576 - 2147483647 - - - - - - Skjul andre - h - 1572864 - 2147483647 - - - - - - Vis alle - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Avslutt ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Fil - - 1048576 - 2147483647 - - - submenuAction: - - Fil - - - - Legg til
 - o - 1048576 - 2147483647 - - - - - - Optimaliser igjen - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Lukk - w - 1048576 - 2147483647 - - - - - - - - - Rediger - - 1048576 - 2147483647 - - - submenuAction: - - Rediger - - - - Angre - z - 1048576 - 2147483647 - - - - - - GjĂžr pĂ„ nytt - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Klipp ut - x - 1048576 - 2147483647 - - - - - - Kopier - c - 1048576 - 2147483647 - - - - - - Lim inn - v - 1048576 - 2147483647 - - - - - - Slett - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Velg alle - a - 1048576 - 2147483647 - - - - - - - - - VerktĂžy - - 2147483647 - - - submenuAction: - - VerktĂžy - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Vindu - - 1048576 - 2147483647 - - - submenuAction: - - Vindu - - - - Minimer - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Legg alle Ăžverst - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - StĂžrrelse (original) - - 2147483647 - - - - - - StĂžrrelse - - 2147483647 - 1 - - - - - - Besparelser - - 2147483647 - 1 - - - - - - VerktĂžy - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Hjelp - - 1048576 - 2147483647 - - - submenuAction: - - Hjelp - - - - Hjelp for ImageOptim - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Om ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - versjon - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - StĂžrrelse - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Liste av filer til optimalisering - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - FilstĂžrrelse etter optimalisering - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Legg til nye filer eller mapper - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/no.lproj/PrefsController.strings b/imageoptim/no.lproj/PrefsController.strings new file mode 100644 index 00000000..370cd59d --- /dev/null +++ b/imageoptim/no.lproj/PrefsController.strings @@ -0,0 +1,48 @@ +/* Window title */ +"5.title" = "Valg for ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Generelt"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimaliseringsgrad"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Kvalitet"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Alternativer for filhĂ„ndtering"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Bevar rettigheter, attributter og harde lenker"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimaliseringsgrad"; + +/* "Fast" */ +"819.title" = "Rask"; + +/* "Insane" */ +"820.title" = "Sinnsyk"; + +/* "Extra" */ +"822.title" = "Ekstra"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: Fjern alle valgfrie deler"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Nettlesere fungerer bedre uten gamma-del"; + +/* label "JPEG quality" */ +"868.title" = "JPEG kvalitet"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: Fjern EXIF-markĂžrer og kommentarer fra filene"; + +/* Header above list of tools to enable */ +"1107.title" = "SlĂ„tt pĂ„"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG kvalitet"; + diff --git a/imageoptim/no.lproj/PrefsController.xib b/imageoptim/no.lproj/PrefsController.xib deleted file mode 100644 index 97c0851d..00000000 --- a/imageoptim/no.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - Valg for ImageOptim - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Bevar rettigheter, attributter og harde lenker - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Ta sikkerhetskopi fĂžr filer skrives til disk - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Alternativer for filhĂ„ndtering - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Fjern alle valgfrie deler - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Nettlesere fungerer bedre uten gamma-del - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Fjern EXIF-markĂžrer og kommentarer fra filene - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - SlĂ„tt pĂ„ - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - Generelt - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Type optimalisering - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Rask - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Sinnsyk - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Ekstra - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - Lengste match - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Bruk ulike filtre - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Avbryt dersom prosessen tar svĂŠrt lang tid - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Lagre bilder i interlacet format - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Optimaliseringsgrad - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Interlacede bilder er som regel stĂžrre. - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 forsĂžk - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 forsĂžk - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimaliseringsgrad - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Rask - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Sinnsyk - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Ekstra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Maksimal kvalitet - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/noopt.png b/imageoptim/noopt.png index 7ab2f4ae..dc5daa17 100644 Binary files a/imageoptim/noopt.png and b/imageoptim/noopt.png differ diff --git a/imageoptim/noopt@2x.png b/imageoptim/noopt@2x.png new file mode 100644 index 00000000..ab6010fb Binary files /dev/null and b/imageoptim/noopt@2x.png differ diff --git a/imageoptim/ok.png b/imageoptim/ok.png index 675045d9..599d68e2 100644 Binary files a/imageoptim/ok.png and b/imageoptim/ok.png differ diff --git a/imageoptim/ok@2x.png b/imageoptim/ok@2x.png new file mode 100644 index 00000000..d4fbad67 Binary files /dev/null and b/imageoptim/ok@2x.png differ diff --git a/imageoptim/optimal_file_list b/imageoptim/optimal_file_list index 500ad0be..0023f355 100644 --- a/imageoptim/optimal_file_list +++ b/imageoptim/optimal_file_list @@ -1,178 +1,391 @@ -ImageOptim.app/Contents/Resources/pl.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/pl.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/da.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/da.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/de.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/de.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/en-GB.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/en-GB.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/en.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/en.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/es.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/es.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/fr.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/fr.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/it.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/it.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/ja.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/ja.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/nl.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/nl.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/no.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/no.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/pt-BR.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/pt-BR.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/pt.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/pt.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/ru.lproj/MainMenu.nib -ImageOptim.app/Contents/Resources/ru.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/sv.lproj/PrefsController.nib -ImageOptim.app/Contents/Resources/sv.lproj/MainMenu.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/SUStatus.nib -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/Sparkle.icns -ImageOptim.app/Contents/Resources/dsa_pub.pem -ImageOptim.app/Contents/Resources/style.css -ImageOptim.app/Contents/Resources/defaults.plist -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist -ImageOptim.app/Contents/Resources/err.png -ImageOptim.app/Contents/Resources/progress.png -ImageOptim.app/Contents/Resources/wait.png -ImageOptim.app/Contents/Resources/noopt.png -ImageOptim.app/Contents/Resources/ok.png -ImageOptim.app/Contents/Resources/reveal.png -ImageOptim.app/Contents/Resources/minus.png -ImageOptim.app/Contents/Resources/plus.png -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Sparkle -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/Current -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Resources -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/License.txt -ImageOptim.app/Contents/Resources/da.lproj/Credits.rtf -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -ImageOptim.app/Contents/Resources/ru.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/de.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/en.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/es.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/fr.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/it.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/ja.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/nl.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/no.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/pl.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/pl.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/ru.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/da.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/de.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/es.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/fr.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/it.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/nl.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/no.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/pt-BR.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/pt.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/sv.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/ja.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/en-GB.lproj/Localizable.strings -ImageOptim.app/Contents/Resources/pt-BR.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/pt.lproj/Credits.rtf -ImageOptim.app/Contents/Resources/sv.lproj/Credits.rtf -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings -ImageOptim.app/Contents/Info.plist -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Info.plist -ImageOptim.app/Contents/Resources/de.lproj/Help/index.html -ImageOptim.app/Contents/Resources/da.lproj/Help/index.html -ImageOptim.app/Contents/Resources/en-GB.lproj/Help/index.html -ImageOptim.app/Contents/Resources/en.lproj/Help/index.html -ImageOptim.app/Contents/Resources/es.lproj/Help/index.html -ImageOptim.app/Contents/Resources/fr.lproj/Help/index.html -ImageOptim.app/Contents/Resources/fr.lproj/Help/prefs.html -ImageOptim.app/Contents/Resources/da.lproj/Help/prefs.html -ImageOptim.app/Contents/Resources/de.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/zh-Hant.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/en-GB.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/pt-BR.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/da.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/ja.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/de.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/vi.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/nl.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/pl.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/en.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/ko.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/fr.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/el.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/es.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/it.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/no.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/tr.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/cs.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/zh-Hans.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/lt.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/pt.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/ru.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/sv.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/vi.lproj/Help/prefs.html ImageOptim.app/Contents/Resources/en-GB.lproj/Help/prefs.html -ImageOptim.app/Contents/Resources/en.lproj/Help/prefs.html -ImageOptim.app/Contents/Resources/es.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/pt-BR.lproj/Help/prefs.html ImageOptim.app/Contents/Resources/ja.lproj/Help/prefs.html ImageOptim.app/Contents/Resources/nl.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/pl.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/ko.lproj/Help/prefs.html ImageOptim.app/Contents/Resources/no.lproj/Help/prefs.html -ImageOptim.app/Contents/Resources/pt-BR.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/en.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/el.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/tr.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/fr.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/es.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/lt.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/zh-Hant.lproj/Help/prefs.html ImageOptim.app/Contents/Resources/pt.lproj/Help/prefs.html -ImageOptim.app/Contents/Resources/ru.lproj/Help/prefs.html -ImageOptim.app/Contents/Resources/ru.lproj/Help/index.html +ImageOptim.app/Contents/Resources/sv.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/da.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/de.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/cs.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/zh-Hans.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/zh-Hans.lproj/Help/index.html +ImageOptim.app/Contents/Resources/en-GB.lproj/Help/index.html +ImageOptim.app/Contents/Resources/pt-BR.lproj/Help/index.html +ImageOptim.app/Contents/Resources/da.lproj/Help/index.html ImageOptim.app/Contents/Resources/ja.lproj/Help/index.html +ImageOptim.app/Contents/Resources/de.lproj/Help/index.html +ImageOptim.app/Contents/Resources/vi.lproj/Help/index.html +ImageOptim.app/Contents/Resources/pl.lproj/Help/index.html +ImageOptim.app/Contents/Resources/lt.lproj/Help/index.html +ImageOptim.app/Contents/Resources/tr.lproj/Help/index.html +ImageOptim.app/Contents/Resources/el.lproj/Help/index.html ImageOptim.app/Contents/Resources/nl.lproj/Help/index.html +ImageOptim.app/Contents/Resources/ko.lproj/Help/index.html ImageOptim.app/Contents/Resources/no.lproj/Help/index.html -ImageOptim.app/Contents/Resources/pt-BR.lproj/Help/index.html +ImageOptim.app/Contents/Resources/fr.lproj/Help/index.html +ImageOptim.app/Contents/Resources/cs.lproj/Help/index.html +ImageOptim.app/Contents/Resources/es.lproj/Help/index.html +ImageOptim.app/Contents/Resources/it.lproj/Help/index.html ImageOptim.app/Contents/Resources/pt.lproj/Help/index.html ImageOptim.app/Contents/Resources/sv.lproj/Help/index.html -ImageOptim.app/Contents/Resources/sv.lproj/Help/prefs.html -ImageOptim.app/Contents/MacOS/jpegrescan -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation -ImageOptim.app/Contents/MacOS/optipng -ImageOptim.app/Contents/MacOS/advpng -ImageOptim.app/Contents/MacOS/pngcrush +ImageOptim.app/Contents/Resources/zh-Hant.lproj/Help/index.html +ImageOptim.app/Contents/Resources/ru.lproj/Help/index.html +ImageOptim.app/Contents/Resources/ru.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/en.lproj/Help/index.html +ImageOptim.app/Contents/Resources/it.lproj/Help/prefs.html +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/_CodeSignature/CodeResources +ImageOptim.app/Contents/PlugIns/ImageOptimize.appex/Contents/_CodeSignature/CodeResources +ImageOptim.app/Contents/PlugIns/ImageOptimize.appex/Contents/Info.plist +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist +ImageOptim.app/Contents/Resources/pt-BR.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/pt-BR.lproj/Credits.html +ImageOptim.app/Contents/Resources/da.lproj/Credits.html +ImageOptim.app/Contents/Resources/de.lproj/Credits.html +ImageOptim.app/Contents/Resources/vi.lproj/Credits.html +ImageOptim.app/Contents/Resources/nl.lproj/Credits.html +ImageOptim.app/Contents/Resources/pl.lproj/Credits.html +ImageOptim.app/Contents/Resources/en.lproj/Credits.html +ImageOptim.app/Contents/Resources/no.lproj/Credits.html +ImageOptim.app/Contents/Resources/fr.lproj/Credits.html +ImageOptim.app/Contents/Resources/tr.lproj/Credits.html +ImageOptim.app/Contents/Resources/cs.lproj/Credits.html +ImageOptim.app/Contents/Resources/es.lproj/Credits.html +ImageOptim.app/Contents/Resources/it.lproj/Credits.html +ImageOptim.app/Contents/Resources/pt.lproj/Credits.html +ImageOptim.app/Contents/Resources/sv.lproj/Credits.html +ImageOptim.app/Contents/Resources/ru.lproj/Credits.html +ImageOptim.app/Contents/Resources/ru.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/vi.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/el.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/pl.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/pt-BR.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/da.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/ja.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/de.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/nl.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/no.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/sv.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/fr.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/es.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/ko.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/zh-Hans.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/dsa_pub.pem +ImageOptim.app/Contents/Resources/defaults.plist +ImageOptim.app/Contents/Resources/style.css +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/DarkAqua.css +ImageOptim.app/Contents/Resources/ImageOptimVerbs.sdef +ImageOptim.app/Contents/Resources/pt.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/ro.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/tr.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/cs.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/it.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/lt.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/ko.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/zh-Hans.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/zh-Hant.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/da.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/ja.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/de.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/vi.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/el.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/nl.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/pl.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/no.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/fr.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/it.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/ro.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/cs.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/es.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/tr.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/lt.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/pt.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/sv.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/ru.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/nl.lproj/ImageOptim.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings +ImageOptim.app/Contents/Resources/ru.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/ja.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/vi.lproj/ImageOptim.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings +ImageOptim.app/Contents/Resources/pt-BR.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/da.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/de.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/el.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/pl.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/cs.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/ko.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/no.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/ro.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/fr.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/tr.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/es.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/zh-Hans.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/it.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/lt.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/zh-Hant.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/pt.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/sv.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/ar.lproj/Credits.html +ImageOptim.app/Contents/Resources/ar.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/ar.lproj/Help/index.html +ImageOptim.app/Contents/Resources/ar.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/ar.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/ar.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/ar.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/fi.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/fi.lproj/Help/index.html +ImageOptim.app/Contents/Resources/fi.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/fi.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/fi.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/fi.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/ja.lproj/Credits.html +ImageOptim.app/Contents/Resources/ro.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/ro.lproj/Help/index.html +ImageOptim.app/Contents/Resources/ro.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/sk.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/sk.lproj/Help/index.html +ImageOptim.app/Contents/Resources/sk.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/sk.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/sk.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/sk.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/uk.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Resources/uk.lproj/Help/index.html +ImageOptim.app/Contents/Resources/uk.lproj/Help/prefs.html +ImageOptim.app/Contents/Resources/uk.lproj/ImageOptim.strings +ImageOptim.app/Contents/Resources/uk.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/uk.lproj/PrefsController.strings +ImageOptim.app/Contents/Info.plist +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/_CodeSignature/CodeResources +ImageOptim.app/Contents/_CodeSignature/CodeResources +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/_CodeSignature/CodeResources +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/libimageoptimjpeg.dylib +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/pngout +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/liblibpng.dylib +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/gifsicle +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/zopflipng +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/pngcrush +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/advpng +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/pngquant +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/jpegoptim +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/jpegtran +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/guetzli +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/oxipng +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/svgcleaner +ImageOptim.app/Contents/PlugIns/ImageOptimize.appex/Contents/MacOS/ImageOptimize ImageOptim.app/Contents/MacOS/ImageOptim -ImageOptim.app/Contents/MacOS/gifsicle -ImageOptim.app/Contents/MacOS/libimageoptimjpeg.dylib -ImageOptim.app/Contents/MacOS/liblibpng.dylib -ImageOptim.app/Contents/MacOS/pngout -ImageOptim.app/Contents/MacOS/jpegtran -ImageOptim.app/Contents/MacOS/jpegoptim -ImageOptim.app/Contents/Resources/da.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/es.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/de.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/en-GB.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/en.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/nl.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/pt.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/fr.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/ru.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/no.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/pt-BR.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/sv.lproj/Help/Help.helpindex -ImageOptim.app/Contents/Resources/ja.lproj/Help/Help.helpindex +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/ImageOptimGPL ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Sparkle +ImageOptim.app/Contents/Resources/en-GB.lproj/ImageOptim.strings +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/ImageOptimGPL +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Sparkle +ImageOptim.app/Contents/PlugIns/ImageOptimize.appex/Contents/Resources/ExtensionController.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib +ImageOptim.app/Contents/Resources/Base.lproj/PrefsController.nib +ImageOptim.app/Contents/Resources/Base.lproj/ImageOptim.nib +ImageOptim.app/Contents/Resources/en-GB.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/en-GB.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/zh-Hant.lproj/Localizable.strings +ImageOptim.app/Contents/Resources/ok.png +ImageOptim.app/Contents/Resources/err.png +ImageOptim.app/Contents/Resources/progress.png +ImageOptim.app/Contents/Resources/wait.png +ImageOptim.app/Contents/Resources/noopt.png +ImageOptim.app/Contents/Resources/progress@2x.png +ImageOptim.app/Contents/Resources/ok@2x.png +ImageOptim.app/Contents/Resources/err@2x.png +ImageOptim.app/Contents/Resources/noopt@2x.png +ImageOptim.app/Contents/Resources/wait@2x.png ImageOptim.app/Contents/Resources/ImageOptim.icns -ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/PkgInfo +ImageOptim.app/Contents/PlugIns/ImageOptimize.appex/Contents/Resources/ImageOptim.icns +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns +ImageOptim.app/Contents/Resources/ja.lproj/InfoPlist.strings +ImageOptim.app/Contents/Resources/en.lproj/PrefsController.strings +ImageOptim.app/Contents/Resources/en.lproj/ImageOptim.strings +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo ImageOptim.app/Contents/PkgInfo +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/Info.plist +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Resources +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/Current +ImageOptim.app/Contents/Frameworks/ImageOptimGPL.framework/Versions/A/Resources/svgo.js +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Resources +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr_CA.lproj +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/pt.lproj +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/Current +ImageOptim.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop diff --git a/imageoptim/pl.lproj/Credits.html b/imageoptim/pl.lproj/Credits.html new file mode 100644 index 00000000..3c444f13 --- /dev/null +++ b/imageoptim/pl.lproj/Credits.html @@ -0,0 +1,30 @@ +
    +

    ImageOptim Kornela LesiƄskiego i wspóƂpra-cowników to nakƂadka na następujące programy:

    + +

    ImageOptim moĆŒe być modyfikowany i rozpowszechniany na zasadach +GNU General Public License wersji 2 lub nowszej. +PNGOUT nie jest objęty GPL i zostaƂ doƂączony za pozwoleniem Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/pl.lproj/Credits.rtf b/imageoptim/pl.lproj/Credits.rtf deleted file mode 100644 index a1e181a0..00000000 --- a/imageoptim/pl.lproj/Credits.rtf +++ /dev/null @@ -1,24 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 Kornela Lesi\uc0\u324 skiego i wsp\'f3\u322 pracownik\'f3w to nak\u322 adka na nast\u281 puj\u261 ce programy os\'f3b trzecich:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} - Cosmina Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} - Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} - Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} - Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} \'96 Eddie Kohler,\ -{\listtext \'95 }oraz {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} - Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim mo\uc0\u380 e by\u263 modyfikowany i rozpow\'96szechniany na zasadach {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License wersji 2 lub nowszej}}. PNGOUT -\b nie -\b0 jest obj\uc0\u281 ty GPL i zosta\u322 do\u322 \u261 czony za pozwoleniem Ardfry Imaging, LLC.} \ No newline at end of file diff --git a/imageoptim/pl.lproj/Help/index.html b/imageoptim/pl.lproj/Help/index.html new file mode 100644 index 00000000..e213150b --- /dev/null +++ b/imageoptim/pl.lproj/Help/index.html @@ -0,0 +1,75 @@ + + + + +Codestin Search App + + + + + + +

    ImageOptim

    + +

    Jak tego uĆŒyć

    + +
      +
    1. Przeciągnij i upuƛć plik PNG, JPEG lub ƛcieĆŒkę pliku do tabeli w oknie ImageOptim.
    2. + +
    3. Poczekaj, aĆŒ do zakoƄczenia procesu.
    4. + +
    5. Zysk! (z mniejszych plikĂłw)
    6. +
    +

    MoĆŒesz upuƛcić plik do ikony dokowania ImageOptim.

    + +

    Dowiedz się, jak zmienić preferencje.

    + +

    Ikony w tabeli plikĂłw

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkObraz zostaƂ zoptymalizowany poprawnie.
    Green XWszystko poszƂo dobrze, ale obraz nie moĆŒe być zoptymalizowany.
    Gray starOptymalizacja pliku w toku.
    Gray dotsPlik zostanie zoptymalizowany po zakoƄczeniu pracy nad innymi plikami.
    Orange exclamation markWystąpiƂ bƂąd podczas optymalizacji. Znajdziesz wyjaƛnienie uruchamiając Console.app.
    +

    Jak to dziaƂa

    + +

    ImageOptim jest początkiem (GUI) dla tych aplikacji:

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • i opcjonalnie PNGOUT.
    • +
    +

    ImageOptim po uruchomieniu wybiera najmniejszy plik.

    + + diff --git a/imageoptim/pl.lproj/Help/prefs.html b/imageoptim/pl.lproj/Help/prefs.html new file mode 100644 index 00000000..e3797941 --- /dev/null +++ b/imageoptim/pl.lproj/Help/prefs.html @@ -0,0 +1,77 @@ + + + + +Codestin Search App + + + + + + +

    Preferencje ImageOptim

    +

    «Powrót do indeksu

    +

    Generalne preferencje

    +
    +
    Zachować uprawnienia do plików, atrybuty i hardlinks
    +
    +

    Zamiast usuwania starych plikĂłw zapisz nowy o tej samej nazwie, po prostu zastąp stary zawartoƛć pliku. Gwarantuje to, ĆŒe wszystkie hardlinki, pseudonimy, plik wƂasnoƛci, uprawnienia i rozszerzone atrybuty plikĂłw pozostaną takie same.

    +

    To jest szybciej ale nie po to, aby zachować uprawnienia.

    +
    +
    pas metadata PNG (gamma, profile kolorĂłw, opcjonalne chunki)
    +
    +

    Pliki PNG mogą mieć rĂłĆŒną jasnoƛć i nasycenie w rĂłĆŒnych przeglądarkach, poniewaĆŒ nie wszystkie przeglądarki obsƂugują korekty gamma i zmianę kolorĂłw. Usuwanie informacji sprawia, ĆŒe kolor bardziej spĂłjny w przeglądarkach i zmniejszy rozmiar pliku.

    +

    Inne niewidzialne informacje są takĆŒe usuwane jak DPI i komentarze.

    +
    +
    Pas metadata JPEG (EXIF, kolor profili, GPS, obracanie, itd.)
    +
    +

    Usuwa metadane obrazu, takie jak profil kolorĂłw, czas ekspozycji, wspóƂrzędne GPS, model aparatu i nazwę oprogramowania uĆŒywanego do utworzenia pliku.

    +

    Osadzone informacje o prawach autorskich są rĂłwnieĆŒ usunięte. NaleĆŒy pamiętać, ĆŒe zazwyczaj obrazy są chronione przez prawo autorskie, niezaleĆŒnie od tego, czy zawierają one takie ukryte metadane czy teĆŒ nie.

    +
    +
    +

    Narzędzia

    +

    Zopfli i PNGOUT są bardzo dobrymi kompresorami PNG, ale bardzo powolnymi. WyƂącz je, jeƛli chcesz szybko zoptymalizować pliki PNG (zostaw tylko AdvPNG, jest najszybszy, ale dobrze kompresuje).

    +

    Zopfli i OptiPNG wyczyƛci wartoƛci RGB i przezroczyste piksele (znany jako "brudne alfa"). Te dwa narzędzia naleĆŒy wyƂączyć, jeƛli chcesz optymalizacji specjalnych plikĂłw, ktĂłre za pomocą kanaƂu alfa tworzą coƛ innego (np. mapa wysokoƛci w plikach danych gry).

    +
    +

    JPEGOptim

    +
    +
    Maksymalna jakoƛć
    +
    +

    Jeƛli ustawiona na 100%, optymalizacja będzie bezstratna.

    +

    Wszystko poniĆŒej 100% spowoduje niĆŒszą jakoƛć plikĂłw, jeƛli wydaje się, ĆŒe zostaƂy zapisane z wyĆŒszą jakoƛć wydruku.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Typ optymalizacji
    +
    +

    PNGOUT jest bardzo skuteczne, ale bardzo wolne. UĆŒyj niĆŒszego poziomu jeƛli nie chcesz czekać.

    +
    +
    Przerwij, jeƛli trwa zbyt dƂugo
    +
    +

    PNGOUT moĆŒe potrzebować duĆŒo czasu, aby zoptymalizować bardzo duĆŒe obrazy. Ta opcja przerywa PNGOUT po 1 minucie.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Poziom optymalizacji
    +
    +

    Liczba rĂłĆŒnych testowanych kombinacji ustawieƄ. Rzadko jest sens, by wyprĂłbować je wszystkie.

    +
    +
    Zrobić zdjęcia z przeplotem (progresywny)
    +
    +

    Z przeplotem zdjęcia wyglądają lepiej, gdy są częƛciowo zaƂadowane, ale zazwyczaj przeplot sprawia ĆŒe kompresja jest mniej wydajna.

    +

    Zaznaczenie tego pola wyboru ma trzy stany: Jeƛli jest zaznaczone, zmusza obrazy, aby byƂy z przeplotem. Po zmieszaniu, będzie na bieĆŒÄ…co przeplatać pliki ktĂłre pozostaną bez zmian, niepowstrzymany usunie przeplot z plikĂłw.

    +
    +
    +
    +
    +

    GIFsicle

    +

    Dla lepszej kompresji, naleĆŒy przekonwertować pliki GIF do PNG (ImageOptim nie robi tego automatycznie).

    +
    + + diff --git a/imageoptim/pl.lproj/ImageOptim.strings b/imageoptim/pl.lproj/ImageOptim.strings new file mode 100644 index 00000000..4c30c5b4 --- /dev/null +++ b/imageoptim/pl.lproj/ImageOptim.strings @@ -0,0 +1,207 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Umieƛć wszystko na wierzchu"; + +/* Menu Item "Window" */ +"19.title" = "Okno"; + +/* Menu Item "Minimize" */ +"23.title" = "Miniaturka"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Okno"; + +/* Top-level Main Menu "Services" */ +"130.title" = "UsƂugi"; + +/* Menu Item "Services" */ +"131.title" = "UsƂugi"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Ukryj ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ZakoƄcz ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Ukryj pozostaƂe"; + +/* Menu Item "Show All" */ +"150.title" = "PokaĆŒ wszystkie"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lista plikĂłw do optymalizacji"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Nazwa"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Wielkoƛć"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Rozmiar pliku po optymalizacji"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Wielkoƛć po optymalizacji"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Zysk"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Stan"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "O ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Preferencje
"; + +/* Menu Item "Edit" */ +"375.title" = "Edycja"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Edycja"; + +/* Menu Item "Select All" */ +"377.title" = "Zaznacz wszystko"; + +/* Menu Item "Undo" */ +"378.title" = "Cofnij"; + +/* Menu Item "Redo" */ +"384.title" = "PowtĂłrz"; + +/* Menu Item "Cut" */ +"398.title" = "Wytnij"; + +/* Menu Item "Copy" */ +"399.title" = "Kopiuj"; + +/* Menu Item "Paste" */ +"400.title" = "Wklej"; + +/* Menu Item "Delete" */ +"402.title" = "UsuƄ"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Dodaj pliki lub katalogi"; + +/* Menu Item "File" */ +"429.title" = "Plik"; + +/* Top-level Main Menu "File" */ +"430.title" = "Plik"; + +/* Menu Item "Add Files
" */ +"437.title" = "Dodaj pliki
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Status optymalizacji"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Stan optymalizacji"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Zamknij okno"; + +/* Menu Item "Help" */ +"504.title" = "Pomoc"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Pomoc"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Pomoc programu ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "O ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Rozpocznij od nowa"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "SprawdĆș aktualizacje
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Przeciągnij pliki obrazkĂłw do obszaru powyĆŒej"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Dodaj"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Rozpocznij optymalizacje od nowa"; + +/* Button "Again" */ +"635.title" = "Od nowa"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Stan"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "wersja"; + +/* TextFieldCell "version" */ +"646.title" = "wersja"; + +/* Menu Item "Tools" */ +"655.title" = "Narzędzia"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Narzędzia"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Przeciągnij obrazki tutaj"; + +/* Menu Item "Delete Completed" */ +"721.title" = "UsuƄ ukoƄczone"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optymalizuj zoptymalizowane"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "Strona ImageOptim"; + +/* Menu Item "View Source" */ +"735.title" = "PokaĆŒ ĆșrĂłdƂo"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Wielkoƛć Zoptymalizowana"; + +/* Menu Item "Savings" */ +"741.title" = "Zysk"; + +/* Menu Item "Best tool" */ +"747.title" = "Najlepsze narzędzie"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Najlepsze narzędzie"; + +/* Menu Item "Original Size" */ +"791.title" = "Oryginalna Wielkoƛć"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "OryginaƂ"; + +/* Menu Item "Show Columns" */ +"809.title" = "PokaĆŒ kolumny"; + +/* Menu Item "Donate" */ +"820.title" = "Wesprzyj darowizną"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Jakoƛć: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Przerwij"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopiuj jako Data URL"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Stratna minifikacja"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "PokaĆŒ w Finderze"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "PokaĆŒ w Finderze"; + diff --git a/imageoptim/pl.lproj/Localizable.strings b/imageoptim/pl.lproj/Localizable.strings index a6154beb..24fef70b 100644 --- a/imageoptim/pl.lproj/Localizable.strings +++ b/imageoptim/pl.lproj/Localizable.strings @@ -1,17 +1,46 @@ +/* tooltip */ +"%@ failed to start" = "Nie udaƂo się uruchomić %@"; + +/* undo command name */ +"Add" = "Dodaj"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Niezbędne narzędzia zostaƂy wyƂączone w Preferencjach"; -"Can't map file into memory" = "Nie udaƂo się zaƂadować pliku"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Nie udaƂo się zaƂadować pliku"; + +/* undo command name */ +"Cut" = "Wytnij"; + +/* tooltip */ "File cannot be optimized any further" = "Plik juĆŒ byƂ maksymalnie zoptymalizowany"; -"File is neither PNG, GIF nor JPEG" = "Plik nie jest typu PNG ani JPEG"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Plik nie jest typu PNG, GIF ani JPEG"; + +/* tooltip */ "Inspecting file" = "Sprawdzam plik"; + +/* newly added to the queue */ "New file" = "Nowo dodany"; + +/* tooltip */ "Optimized file could not be saved" = "Nie udaƂo się zapisać zoptymalizowanej wersji"; + +/* tooltip */ "Optimized successfully with %@" = "Zoptymalizowano za pomocą %@"; -"Size of optimized file is 0" = "Plik po optymalizacji ma 0 batĂłw (bƂąd)"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Oszczędzono %@ z %@. W sumie %@ (niektĂłre pliki do %@)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Oszczędzono %@ z %@. Úrednio %@ na plik (aĆŒ do %@)"; + +/* command name, tooltip */ "Started %@" = "Rozpoczęto %@"; -"Waiting in queue" = "Oczekuje w kolejce"; -"Waiting to be optimized" = "Oczekuje na optymalizację"; -"Waiting to start more optimizations" = "Oczekuje na kolejną rundę optymalizacji"; -"%@ failed to start" = "Nie udaƂo się uruchomić %@"; -"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Zyskano %@ z %@. Úrednio %@ (maksymalnie %@)"; -"Saved %@ out of %@. %@ per file on average (up to %@)" = "Zyskano %@ z %@. OgĂłlnie %@ (maksymalnie %@)"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Oczekuje na kolejną rundę optymalizacji"; diff --git a/imageoptim/pl.lproj/MainMenu.xib b/imageoptim/pl.lproj/MainMenu.xib deleted file mode 100644 index bbf73eb8..00000000 --- a/imageoptim/pl.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Status optymalizacji - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Nazwa - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - OryginaƂ - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Wielkoƛć - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Zysk - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Najlepsze narzędzie - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Przeciągnij pliki obrazkĂłw do obszaru powyĆŒej - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Dodaj - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{416, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{440, 6}, {89, 25}} - - YES - - 67239424 - 134217728 - Od Nowa - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Rozpocznij optymalizacje od nowa - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - O ImageOptim - - 2147483647 - - - - - - SprawdĆș aktualizacje
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferencje
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - UsƂugi - - 1048576 - 2147483647 - - - submenuAction: - - UsƂugi - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Ukryj ImageOptim - h - 1048576 - 2147483647 - - - - - - Ukryj pozostaƂe - h - 1572864 - 2147483647 - - - - - - PokaĆŒ wszystkie - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ZakoƄcz ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Plik - - 1048576 - 2147483647 - - - submenuAction: - - Plik - - - - Dodaj pliki
 - o - 1048576 - 2147483647 - - - - - - Rozpocznij od nowa - r - 1048576 - 2147483647 - - - - - - YES - YES - Optymalizuj zoptymalizowane - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Zamknij - w - 1048576 - 2147483647 - - - - - - - - - Edycja - - 1048576 - 2147483647 - - - submenuAction: - - Edycja - - - - Cofnij - z - 1048576 - 2147483647 - - - - - - PowtĂłrz - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Wytnij - x - 1048576 - 2147483647 - - - - - - Kopiuj - c - 1048576 - 2147483647 - - - - - - Wklej - v - 1048576 - 2147483647 - - - - - - UsuƄ - CA - 1048576 - 2147483647 - - - - - - YES - YES - UsuƄ ukoƄczone - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Zaznacz wszystko - a - 1048576 - 2147483647 - - - - - - - - - Narzędzia - - 2147483647 - - - submenuAction: - - Narzędzia - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Okno - - 1048576 - 2147483647 - - - submenuAction: - - Okno - - - - Miniaturka - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Umieƛć wszystko na wierzchu - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - PokaĆŒ kolumny - - 2147483647 - - - submenuAction: - - - - - - Oryginalna Wielkoƛć - - 2147483647 - - - - - - Wielkoƛć Zoptymalizowana - - 2147483647 - 1 - - - - - - Zysk - - 2147483647 - 1 - - - - - - Najlepsze narzędzie - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Pomoc - - 1048576 - 2147483647 - - - submenuAction: - - Pomoc - - - - Pomoc programu ImageOptim - - 1048576 - 2147483647 - - - - - - Strona ImageOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - PokaĆŒ ĆșrĂłdƂo - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - O ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - wersja - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Wielkoƛć - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Lista plikĂłw do optymalizacji - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Wielkoƛć po optymalizacji - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Dodaj pliki lub katalogi - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Stan optymalizacji - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Stan - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Przeciągnij obrazki tutaj - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Rozmiar pliku po optymalizacji - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/pl.lproj/PrefsController.strings b/imageoptim/pl.lproj/PrefsController.strings new file mode 100644 index 00000000..307355fa --- /dev/null +++ b/imageoptim/pl.lproj/PrefsController.strings @@ -0,0 +1,60 @@ +/* Window title */ +"5.title" = "Preferencje ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "OgĂłlne"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Typ optymalizacji"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Jakoƛć"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Zapisywanie na dysk"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Zachowaj uprawnienia plikĂłw, atrybuty i linki"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Typ optymalizacji"; + +/* "Fast" */ +"819.title" = "Szybki"; + +/* "Insane" */ +"820.title" = "Szalony"; + +/* "Normal" */ +"821.title" = "Normalny"; + +/* "Extra" */ +"822.title" = "Ekstra"; + +/* Checkbox in Preferences */ +"854.title" = "UsuƄ wszystkie opcjonalne dane z PNG (np. profil kolorĂłw)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Przeglądarki wymagają usunięcia gammy"; + +/* label "JPEG quality" */ +"868.title" = "Jakoƛć JPEG"; + +/* Checkbox in Preferences */ +"911.title" = "UsuƄ znaczniki EXIF z plikĂłw JPEG (np. GPS, profil kolorĂłw)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata"; + +/* Header above list of tools to enable */ +"1107.title" = "UĆŒywaj"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Spowalnia zapis na dyskach sieciowych"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "WyƂącz, ĆŒeby nie usuwać osadzonych informacji o autorze"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "Jakoƛć PNG"; + diff --git a/imageoptim/pl.lproj/PrefsController.xib b/imageoptim/pl.lproj/PrefsController.xib deleted file mode 100644 index 7c0f5fb4..00000000 --- a/imageoptim/pl.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - Preferencje ImageOptim - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Zachowaj uprawnienia plikĂłw, atrybuty i linki - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - RĂłb kopię zapasową przed zapisywaniem - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Zapisywanie na dysk - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - UsuƄ wszystkie opcjonalne chunki - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Przeglądarki wymagają usunięcia gammy - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - UsuƄ znaczniki EXIF i komentarze z plikĂłw - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - UĆŒywaj - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - OgĂłlne - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Typ optymalizacji - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Prosty - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Xtremalny - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Itensywny - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - DƂugi ciąg - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - SprĂłbuj kilka rĂłĆŒnych filtrĂłw - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Przerwij, jeƛli pracuje zbyt dƂugo - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - StwĂłrz grafiki z przeplotem (progresywne) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - Typ optymalizacji - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Pliki z przeplotem są większe - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 prĂłby - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 prĂłb - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Typ optymalizacji - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Szybki - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Szalony - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normalny - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Maksymalna jakoƛć - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/plus.png b/imageoptim/plus.png deleted file mode 100644 index c4b2097f..00000000 Binary files a/imageoptim/plus.png and /dev/null differ diff --git a/imageoptim/progress.png b/imageoptim/progress.png index 7136441a..0b4f67a4 100644 Binary files a/imageoptim/progress.png and b/imageoptim/progress.png differ diff --git a/imageoptim/progress@2x.png b/imageoptim/progress@2x.png new file mode 100644 index 00000000..fa7ad199 Binary files /dev/null and b/imageoptim/progress@2x.png differ diff --git a/imageoptim/pt-BR.lproj/Credits.html b/imageoptim/pt-BR.lproj/Credits.html new file mode 100644 index 00000000..4e254466 --- /dev/null +++ b/imageoptim/pt-BR.lproj/Credits.html @@ -0,0 +1,32 @@ +
    +

    O ImageOptim por Kornel LesiƄski Ă© uma interface grĂĄfica para utilidades de terceiros:

    + +

    O ImageOptim pode ser distribuĂ­do e modificado sob a +GNU General Public License versĂŁo 2 ou posterior. +Bundled PNGOUT is not +covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +

    Traduzido por Luiz Menezes Jr

    +
    diff --git a/imageoptim/pt-BR.lproj/Credits.rtf b/imageoptim/pt-BR.lproj/Credits.rtf deleted file mode 100644 index 104c1e6d..00000000 --- a/imageoptim/pt-BR.lproj/Credits.rtf +++ /dev/null @@ -1,24 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 - -\f0\fs22 \cf0 O {\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt \cf2 \ul \ulc2 ImageOptim}} por Kornel Lesi\uc0\u324 ski \'e9 uma interface gr\'e1fica para utilidades de terceiros:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540\ql\qnatural -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} por Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} por Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} por Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} por Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} por Eddie Kohler,\ -{\listtext \'95 }e {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} por Ken Silverman.\ -\pard\pardeftab720\li200\ql\qnatural -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 O ImageOptim pode ser distribu\'eddo e modificado sob a {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License vers\'e3o 2 }}\cf3 \ul \ulc3 ou posterior\cf0 \ulnone . Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -Traduzido por Luiz Menezes Jr} \ No newline at end of file diff --git a/imageoptim/pt-BR.lproj/Help/Help.helpindex b/imageoptim/pt-BR.lproj/Help/Help.helpindex deleted file mode 100644 index ed7bd870..00000000 Binary files a/imageoptim/pt-BR.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/pt-BR.lproj/Help/index.html b/imageoptim/pt-BR.lproj/Help/index.html index 7e283a96..6bbe81ef 100644 --- a/imageoptim/pt-BR.lproj/Help/index.html +++ b/imageoptim/pt-BR.lproj/Help/index.html @@ -1,78 +1,63 @@ - - - - - - - Codestin Search App - - - - - - - + + + - - main +Codestin Search App + + + -

    ImageOptim

    + +

    ImageOptim

    Como usar

      -
    1. Arrastar e soltar arquivos PNG e JPEG, ou pastas, no centro da janela do ImageOptim.
    2. +
    3. Arrastar e soltar arquivos PNG e JPEG, ou pastas, no centro da janela do ImageOptim.
    4. Espere até que termine.
    5. Pronto! (arquivos menores)
    - -

    Também pode arrastar e soltar os arquivos no ícone do ImageOptim no dock.

    +

    Também pode arrastar e soltar os arquivos no ícone do ImageOptim no dock.

    Saiba como alterar as PreferĂȘncias.

    Ícones na lista de arquivos

    - - + + - - - + + - - - + + - - - + + - - - + + -
    Green Checkmark
    Green Checkmark A otimização da imagem terminou com sucesso.
    Green X
    Green X Correu tudo bem, mas não foi possível otimizar a imagem para além do seu estado atual.
    Gray star
    Gray star A optimização deste arquivo estå em progresso.
    Gray dots
    Gray dots O arquivo estĂĄ em espera para ser otimizado, logo que outros arquivos acabarem de ser processados.
    Orange exclamation mark
    Orange exclamation mark Ocorreu um erro durante a otimização. Encontrarå mais detalhes ao executar a aplicação 'terminal'.
    - -

    Como Ă© que funciona

    + +

    Como Ă© que funciona

    O ImageOptim é uma interface gråfica (GUI) para estas aplicaçÔes:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +65,10 @@

      Como Ă© que funciona

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • e opcionalmente o PNGOUT.
    - -

    O ImageOptim executa-as e automaticamente escolhe o arquivo menor.

    +

    O ImageOptim executa-as e automaticamente escolhe o arquivo menor.

    diff --git a/imageoptim/pt-BR.lproj/Help/prefs.html b/imageoptim/pt-BR.lproj/Help/prefs.html index 66fea5b2..281e1e09 100644 --- a/imageoptim/pt-BR.lproj/Help/prefs.html +++ b/imageoptim/pt-BR.lproj/Help/prefs.html @@ -1,103 +1,77 @@ - - -Codestin Search App + + + + +Codestin Search App - - - - - -Geral -

    PreferĂȘncias do ImageOptim

    -

    « Voltar ao índice

    -

    Não deverå ser necessårio alterar qualquer destas opçÔes.

    -

    PreferĂȘncias gerais

    -
    -
    Preservar permissÔes, atributos e links para arquivos
    -
    -

    Em vez de apagar o arquivo antigo e escrever um novo, irĂĄ apenas substituir o conteĂșdo do arquivo anterior. Isto assegura que todos os links, aliases, proprietĂĄrios, permissĂ”es e atributos adicionais do arquivo sĂŁo mantidos. -

    É ligeiramente mais rĂĄpido nĂŁo preservar as permissĂ”es. -

    -
    Criar cópia de segurança do arquivo original antes de salvar
    -

    Irå criar uma cópia do ficheiro com ~ adicionado ao nome. Isto torna a optimização um pouco mais lenta e acumula cópias de segurança no seu disco rígido. -

    - -
    Remover todos os pedaços opcionais
    -

    Mantenha ativo se estiver optimizando para a Web. Desative se tiver PNGs especiais com metadados adicionais.

    -
    Remover marcadores EXIF dos arquivos
    -

    Remove metadados da imagem, como o nome do programa ou modelo de cĂąmera que criou o arquivos.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Ativado
    -

    Se marcado, o ImageOptim irĂĄ tentar otimizar arquivos JPEG.

    + + + +

    PreferĂȘncias ImageOptim

    +

    « Voltar ao índice

    +

    PreferĂȘncias gerais

    +
    +
    Preservar permissÔes, atributos e links para arquivos
    +
    +

    Em vez de apagar o arquivo antigo e escrever um novo, irĂĄ apenas substituir o conteĂșdo do arquivo anterior. Isto assegura que todos os links, aliases, proprietĂĄrios, permissĂ”es e atributos adicionais do arquivo sĂŁo mantidos.

    +

    É ligeiramente mais rĂĄpido nĂŁo preservar as permissĂ”es.

    +
    +
    PNG: Remover todos os pedaços opcionais
    +
    +

    Mantenha ativo se estiver optimizando para a Web. Desative se tiver PNGs especiais com metadados adicionais.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    JPEG: Remover marcadores EXIF e comentĂĄrios dos arquivos
    +
    +

    Remove metadados da imagem, como o nome do programa ou modelo de cĂąmera que criou o arquivos.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Ferramentas

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    Qualidade mĂĄxima
    -

    Se definido como 100%, a optimização serå sem perdas.

    -

    Qualquer valor abaixo de 100% causarå redução de qualidade nos arquivos, se parecerem ter sido salvos com uma definição de qualidade måxima mais elevada.

    -
    +
    +

    Se definido como 100%, a optimização serå sem perdas.

    +

    Qualquer valor abaixo de 100% causarå redução de qualidade nos arquivos, se parecerem ter sido salvos com uma definição de qualidade måxima mais elevada.

    +
    +
    -
    -pngout -

    PNGOUT

    -
    -
    Ativado
    -

    Se marcado, o ImageOptim irĂĄ tentar otimizar arquivos PNG utilizando o PNGOUT. -

    O PNGOUT nĂŁo Ă© distribuĂ­do com o ImageOptim. É uma excelente ferramenta, mas o autor do PNGOUT proĂ­be a sua redistribuição, por isso terĂĄ de baixĂĄ-lo manualmente.

    - -
    -
    Tipo de otimização
    -

    O PNGOUT é muito eficaz mas também muito lento. Utilize o nível mais baixo se for impaciente.

    - -
    Interromper se demorar muito tempo a executar
    -

    O PNGOUT poderå necessitar de muito tempo para optimizar imagens muito grandes. Esta opção irå interromper discretamente o PNGOUT após 1 minuto.

    -
    +
    +

    PNGOUT

    +
    +
    Tipo de otimização
    +
    +

    O PNGOUT é muito eficaz mas também muito lento. Utilize o nível mais baixo se for impaciente.

    +
    +
    Interromper se demorar muito tempo a executar
    +
    +

    O PNGOUT poderå necessitar de muito tempo para optimizar imagens muito grandes. Esta opção irå interromper discretamente o PNGOUT após 1 minuto.

    +
    +
    -
    -advpng -

    AdvPNG

    -
    -
    Ativado
    -

    Se marcado, o ImageOptim irĂĄ tentar otimizar arquivos PNG utilizando a ferramenta AdvPNG.

    - -
    -
    Nível de optimização
    -
    O AdvPNG Ă© relativamente rĂĄpido, por isso pode utilizar o nĂ­vel mĂĄximo.
    -
    -
    -
    -optipng -

    OptiPNG

    -
    -
    Ativado
    -

    Se marcado, o ImageOptim irĂĄ tentar otimizar arquivos PNG utilizando a ferramenta OptiPNG.

    - -
    -
    Nível de optimização
    -

    O nĂșmero de diferentes combinaçÔes de definiçÔes que serĂŁo testadas. Raramente farĂĄ sentido testĂĄ-las todas.

    -
    Tornar imagens entrelaçada (progressivas)
    -

    As imagens entrelaçadas tĂȘm melhor aparĂȘncia quando estĂŁo parcialmente carregadas, mas normalmente o entrelaçamento torna a compressĂŁo menos eficaz .

    -

    Esta caixa de verificação tem trĂȘs estados: se assinalada, irĂĄ forçar as imagens a tornarem-se entrelaçadas. Se no estado intermĂ©dio, irĂĄ manter os arquivos inalterados em termos de entrelaçamento. Se desassinalado, irĂĄ removar entrelaçamento dos arquivos.

    -
    -
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Ativado
    -

    Se marcado, o ImageOptim irĂĄ tentar otimizar arquivos GIF utilizando a ferramenta Gifsicle. - -

    Arquivos GIF serão alterados para entrelaçados ou não entrelaçados automaticamente, o que resultar num ficheiro menor. Comentårios no arquivos serão removidos.

    -

    Por favor tenha em mente que o Gifsicle funciona melhor com GIFs animados e que GIFs nĂŁo-animados raramente podem ser optimizados.

    -

    Para melhor compressĂŁo, deve converter arquivos GIF para PNGs (O ImageOptim nĂŁo o faz automaticamente).

    +
    +

    OxiPNG

    +
    +
    Nível de otimização
    +
    +

    O nĂșmero de diferentes combinaçÔes de definiçÔes que serĂŁo testadas. Raramente farĂĄ sentido testĂĄ-las todas.

    +
    +
    Tornar imagens entrelaçadas (progressivas)
    +
    +

    As imagens entrelaçadas tĂȘm melhor aparĂȘncia quando estĂŁo parcialmente carregadas, mas normalmente o entrelaçamento torna a compressĂŁo menos eficaz .

    +

    Esta caixa de verificação tem trĂȘs estados: se assinalada, irĂĄ forçar as imagens a tornarem-se entrelaçadas. Se no estado intermĂ©dio, irĂĄ manter os arquivos inalterados em termos de entrelaçamento. Se desassinalado, irĂĄ removar entrelaçamento dos arquivos.

    +
    +
    +
    +

    Gifsicle

    +

    Para melhor compressĂŁo, deve converter arquivos GIF para PNGs (O ImageOptim nĂŁo o faz automaticamente).

    +
    + + diff --git a/imageoptim/pt-BR.lproj/ImageOptim.strings b/imageoptim/pt-BR.lproj/ImageOptim.strings new file mode 100644 index 00000000..8ca616df --- /dev/null +++ b/imageoptim/pt-BR.lproj/ImageOptim.strings @@ -0,0 +1,168 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Passar tudo para a frente"; + +/* Menu Item "Window" */ +"19.title" = "Janela"; + +/* Menu Item "Minimize" */ +"23.title" = "Minimizar"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Janela"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "Principal"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Serviços"; + +/* Menu Item "Services" */ +"131.title" = "Serviços"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Ocultar o ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Sair do ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Ocultar outras aplicaçÔes"; + +/* Menu Item "Show All" */ +"150.title" = "Mostrar tudo"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lista de arquivos a otimizar"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Arquivo"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Tamanho"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Redução"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Sobre o ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "PreferĂȘncias
"; + +/* Menu Item "Edit" */ +"375.title" = "Edição"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Edição"; + +/* Menu Item "Select All" */ +"377.title" = "Selecionar tudo"; + +/* Menu Item "Undo" */ +"378.title" = "Desfazer"; + +/* Menu Item "Redo" */ +"384.title" = "Refazer"; + +/* Menu Item "Cut" */ +"398.title" = "Cortar"; + +/* Menu Item "Copy" */ +"399.title" = "Copiar"; + +/* Menu Item "Paste" */ +"400.title" = "Colar"; + +/* Menu Item "Delete" */ +"402.title" = "Apagar"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Adicionar novos arquivos ou pastas"; + +/* Menu Item "File" */ +"429.title" = "Arquivo"; + +/* Top-level Main Menu "File" */ +"430.title" = "Arquivo"; + +/* Menu Item "Add Files
" */ +"437.title" = "Adicionar arquivos
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Estado da otimização"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Estado da otimização"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Fechar"; + +/* Menu Item "Help" */ +"504.title" = "Ajuda"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Ajuda"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Ajuda do ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Sobre do ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Otimizar novamente"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Procurar atualizaçÔes"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Arraste arquivos de imagem para a tabela acima"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Executar otimizaçÔes novamente"; + +/* Button "Again" */ +"635.title" = "Repetir"; + +/* TextFieldCell "version" */ +"646.title" = "versĂŁo"; + +/* Menu Item "Tools" */ +"655.title" = "Ferramentas"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Ferramentas"; + +/* Menu Item "Quick Look" */ +"708.title" = "PrĂ©-visualizar"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Remoção Compltea"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Otimização Completa"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Tamanho"; + +/* Menu Item "Savings" */ +"741.title" = "Redução"; + +/* Menu Item "Best tool" */ +"747.title" = "Ferramentas"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Ferramentas"; + +/* Menu Item "Original Size" */ +"791.title" = "Tamanho (original)"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Tamanho (original)"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Qualidade: 100%"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Copiar Data URL"; + diff --git a/imageoptim/pt-BR.lproj/Localizable.strings b/imageoptim/pt-BR.lproj/Localizable.strings index 16de1955..5756482a 100644 --- a/imageoptim/pt-BR.lproj/Localizable.strings +++ b/imageoptim/pt-BR.lproj/Localizable.strings @@ -1,14 +1,40 @@ +/* tooltip */ +"%@ failed to start" = "O %@ falhou ao iniciar"; + +/* undo command name */ +"Add" = "Adicionar"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Todas as ferramentas necessĂĄrias foram desativadas nas PreferĂȘncias"; -"Can't map file into memory" = "NĂŁo foi possĂ­vel mapear o arquivo na memĂłria"; + +/* tooltip, generic loading error */ +"Can't open the file" = "NĂŁo foi possĂ­vel mapear o arquivo na memĂłria"; + +/* undo command name */ +"Cut" = "Cortar"; + +/* tooltip */ "File cannot be optimized any further" = "O arquivo nĂŁo pode ser melhor otimizado"; + +/* tooltip */ "File is neither PNG, GIF nor JPEG" = "O arquivo nĂŁo Ă© PNG ou JPEG"; + +/* tooltip */ "Inspecting file" = "Analisando arquivo"; + +/* newly added to the queue */ "New file" = "Novo arquivo"; + +/* tooltip */ "Optimized file could not be saved" = "NĂŁo foi possĂ­vel salvar o arquivo otimizado"; + +/* tooltip */ "Optimized successfully with %@" = "Optimizado com sucesso com o %@"; -"Size of optimized file is 0" = "O tamanho do arquivo otimizado Ă© 0 (zero)"; + +/* command name, tooltip */ "Started %@" = "Iniciado o %@"; -"Waiting in queue" = "Aguarando na fila"; -"Waiting to be optimized" = "Aguardando para ser otimizado"; -"Waiting to start more optimizations" = "Aguardando para iniciar mais otimizaçÔes"; -"%@ failed to start" = "O %@ falhou ao iniciar"; \ No newline at end of file + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Aguardando para iniciar mais otimizaçÔes"; + diff --git a/imageoptim/pt-BR.lproj/MainMenu.xib b/imageoptim/pt-BR.lproj/MainMenu.xib deleted file mode 100644 index f59d5d87..00000000 --- a/imageoptim/pt-BR.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Estado da otimização - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Arquivo - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Tamanho (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Tamanho - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Redução - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Ferramentas - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Arraste arquivos de imagem para a tabela acima - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Add - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{428, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{452, 6}, {77, 25}} - - YES - - 67239424 - 134217728 - Repetir - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Executar otimizaçÔes novamente - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - Principal - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Sobre o ImageOptim - - 2147483647 - - - - - - Procurar atualizaçÔes - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - PreferĂȘncias
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Serviços - - 1048576 - 2147483647 - - - submenuAction: - - Serviços - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Ocultar o ImageOptim - h - 1048576 - 2147483647 - - - - - - Ocultar outras aplicaçÔes - h - 1572864 - 2147483647 - - - - - - Mostrar tudo - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Sair do ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Arquivo - - 1048576 - 2147483647 - - - submenuAction: - - Arquivo - - - - Adicionar arquivos
 - o - 1048576 - 2147483647 - - - - - - Otimizar novamente - r - 1048576 - 2147483647 - - - - - - YES - YES - Otimização Completa - r - 1572864 - 2147483647 - - - - - - PrĂ©-visualizar - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Fechar - w - 1048576 - 2147483647 - - - - - - - - - Edição - - 1048576 - 2147483647 - - - submenuAction: - - Edição - - - - Desfazer - z - 1048576 - 2147483647 - - - - - - Refazer - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cortar - x - 1048576 - 2147483647 - - - - - - Copiar - c - 1048576 - 2147483647 - - - - - - Colar - v - 1048576 - 2147483647 - - - - - - Apagar - CA - 1048576 - 2147483647 - - - - - - YES - YES - Remoção Compltea - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Selecionar tudo - a - 1048576 - 2147483647 - - - - - - - - - Ferramentas - - 2147483647 - - - submenuAction: - - Ferramentas - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Janela - - 1048576 - 2147483647 - - - submenuAction: - - Janela - - - - Minimizar - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Passar tudo para a frente - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Tamanho (original) - - 2147483647 - - - - - - Tamanho - - 2147483647 - 1 - - - - - - Redução - - 2147483647 - 1 - - - - - - Ferramentas - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Ajuda - - 1048576 - 2147483647 - - - submenuAction: - - Ajuda - - - - Ajuda do ImageOptim - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Sobre do ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - versĂŁo - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Tamanho - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Lista de arquivos a otimizar - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Adicionar novos arquivos ou pastas - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/pt-BR.lproj/PrefsController.strings b/imageoptim/pt-BR.lproj/PrefsController.strings new file mode 100644 index 00000000..76bf0716 --- /dev/null +++ b/imageoptim/pt-BR.lproj/PrefsController.strings @@ -0,0 +1,48 @@ +/* Window title */ +"5.title" = "PreferĂȘncias ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Geral"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "NĂ­vel de otimização"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Qualidade"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Gravando arquivos no disco"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Preservar permissĂ”es, atributos e links para arquivos"; + +/* label in speed tab "Optimization level" */ +"818.title" = "NĂ­vel de otimização"; + +/* "Fast" */ +"819.title" = "RĂĄpida"; + +/* "Insane" */ +"820.title" = "Insano"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: Remover todos os pedaços opcionais"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Os navegadores Web necessitam que os pedaços gama sejam removidos"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: qualidade"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: Remover marcadores EXIF e comentĂĄrios dos arquivos"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata"; + +/* Header above list of tools to enable */ +"1107.title" = "Ativado"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: qualidade"; + diff --git a/imageoptim/pt-BR.lproj/PrefsController.xib b/imageoptim/pt-BR.lproj/PrefsController.xib deleted file mode 100644 index 53fea3a3..00000000 --- a/imageoptim/pt-BR.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - PreferĂȘncias ImageOptim - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Preservar permissĂ”es, atributos e links para arquivos - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Criar cĂłpia de segurança do arquivo original antes de salvar - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Gravando arquivos no disco - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Remover todos os pedaços opcionais - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Os navegadores Web necessitam que os pedaços gama sejam removidos - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Remover marcadores EXIF e comentĂĄrios dos arquivos - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Ativado - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - Geral - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Tipo de otimização - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Simples - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Extrema - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intensa - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - CorrespondĂȘncia mais longa - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Tentar vĂĄrios filtros diferentes - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Interromper se demorar muito tempo para executar - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Tornar imagens entrelaçadas (progressivas) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - NĂ­vel de otimização - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Arquivos interlaçados sĂŁo normalmente maiores - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 tentativas - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 tentativas - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - NĂ­vel de otimização - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - RĂĄpida - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Insano - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Qualidade mĂĄxima - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/pt.lproj/Credits.html b/imageoptim/pt.lproj/Credits.html new file mode 100644 index 00000000..7b0da399 --- /dev/null +++ b/imageoptim/pt.lproj/Credits.html @@ -0,0 +1,31 @@ +
    +

    O ImageOptim por Kornel LesiƄski Ă© uma GUI para utilidades de terceiros:

    + +

    O ImageOptim pode ser distribuĂ­do e modificado sob a +GNU General Public License versĂŁo 2 ou posterior. + Bundled PNGOUT is not +covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/pt.lproj/Credits.rtf b/imageoptim/pt.lproj/Credits.rtf deleted file mode 100644 index 7bfb0f14..00000000 --- a/imageoptim/pt.lproj/Credits.rtf +++ /dev/null @@ -1,24 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 - -\f0\fs22 \cf0 O {\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt \cf2 \ul \ulc2 ImageOptim}} por Kornel Lesi\uc0\u324 ski \'e9 uma GUI para utilidades de terceiros:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} por Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} por Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} por Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} por Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} por Eddie Kohler,\ -{\listtext \'95 }e {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} por Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 O ImageOptim pode ser distribu\'eddo e modificado sob a {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License vers\'e3o 2 }}\cf3 \ul \ulc3 ou posterior\cf0 \ulnone . - Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.} \ No newline at end of file diff --git a/imageoptim/pt.lproj/Help/Help.helpindex b/imageoptim/pt.lproj/Help/Help.helpindex deleted file mode 100644 index 28aabfb5..00000000 Binary files a/imageoptim/pt.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/pt.lproj/Help/index.html b/imageoptim/pt.lproj/Help/index.html index f8216675..9cbfd469 100644 --- a/imageoptim/pt.lproj/Help/index.html +++ b/imageoptim/pt.lproj/Help/index.html @@ -1,78 +1,64 @@ - - - + + - - - Codestin Search App - - - - - - - + +Codestin Search App + + + + - main - -

    ImageOptim

    +

    ImageOptim

    Como usar

      -
    1. Arrastar e largar ficheiros PNG e JPEG, ou pastas, na tabela principal da janela do ImageOptim.
    2. +
    3. Arrastar e largar ficheiros PNG e JPEG, ou pastas, na tabela principal da janela do ImageOptim.
    4. Aguardar até que termine.
    5. Lucrar! (com ficheiros mais pequenos)
    - -

    Também pode largar os ficheiros no ícone do ImageOptim na Dock.

    +

    Também pode largar os ficheiros no ícone do ImageOptim na Dock.

    Saiba como alterar PreferĂȘncias.

    Ícones na tabela de ficheiros

    - - + + - - - + + - - - + + - - - + + - - - + + -
    Green Checkmark
    Green Checkmark A optimização da imagem terminou com sucesso.
    Green X
    Green X Correu tudo bem, mas não foi possível optimizar a imagem para além do seu estado actual.
    Gray star
    Gray star A optimização deste ficheiro estå em progresso.
    Gray dots
    Gray dots O ficheiro estĂĄ em espera para ser optimizado, logo que outros ficheiros acabem de ser processados.
    Orange exclamation mark
    Orange exclamation mark Ocorreu um erro durante a optimização. Irå encontrar mais detalhes ao executar a aplicação Consola.
    - -

    Como Ă© que funciona

    + +

    Como Ă© que funciona

    O ImageOptim é uma interface gråfica (GUI) para estas aplicaçÔes:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +66,10 @@

      Como Ă© que funciona

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • e opcionalmente o PNGOUT.
    - -

    O ImageOptim executa-as e automaticamente escolhe o ficheiro mais pequeno.

    +

    O ImageOptim executa-as e automaticamente escolhe o ficheiro mais pequeno.

    diff --git a/imageoptim/pt.lproj/Help/prefs.html b/imageoptim/pt.lproj/Help/prefs.html index 3283de53..c141e19e 100644 --- a/imageoptim/pt.lproj/Help/prefs.html +++ b/imageoptim/pt.lproj/Help/prefs.html @@ -1,102 +1,77 @@ - - + + + + Codestin Search App - - - - - -general -

    PreferĂȘncias do ImageOptim

    -

    « Voltar ao índice

    -

    Não deverå ser necessårio alterar qualquer destas opçÔes.

    -

    PreferĂȘncias gerais

    -
    -
    Preservar permissÔes, atributos e hardlinks para ficheiros
    -
    -

    Em vez de apagar o ficheiro antigo e escrever um novo, irå apenas substituir o conteudo do ficheiro anterior. Isto assegura que todos os hardlinks, aliases, proprietårios, permissoÔes e atributos adicionais do ficheiros são mantidos. -

    É ligeiramente mais rĂĄpido nĂŁo preservar as permissĂ”es. -

    -
    Criar cópia de segurança do ficheiro original antes de guardar
    -

    Irå criar uma cópia do ficheiro com ~ adicionado ao nome. Isto torna a optimização um pouco mais lenta e acumula cópias de segurança no seu disco rígido. -

    -
    Remover todos os pedaços opcionais
    -

    Mantenha activo se estiver a optimizar para a Web. Desactive se tiver PNGs especiais com metadados adicionais.

    -
    Remover marcadores EXIF dos ficheiros
    -

    Remove metadados da imagem, como o nome do programa ou modelo de cĂąmara que criou o ficheiro.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Activado
    -

    Se assinalado, o ImageOptim irĂĄ tentar optimizar ficheiros JPEG.

    + + + +

    PreferĂȘncias do ImageOptim

    +

    « Voltar ao índice

    +

    PreferĂȘncias gerais

    +
    +
    Preservar permissÔes, atributos e hardlinks para ficheiros
    +
    +

    Em vez de apagar o ficheiro antigo e escrever um novo, irå apenas substituir o conteudo do ficheiro anterior. Isto assegura que todos os hardlinks, aliases, proprietårios, permissoÔes e atributos adicionais do ficheiros são mantidos.

    +

    É ligeiramente mais rĂĄpido nĂŁo preservar as permissĂ”es.

    +
    +
    Remover todos os pedaços opcionais
    +
    +

    Mantenha activo se estiver a optimizar para a Web. Desactive se tiver PNGs especiais com metadados adicionais.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    Remover marcadores EXIF dos ficheiros
    +
    +

    Remove metadados da imagem, como o nome do programa ou modelo de cĂąmara que criou o ficheiro.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    Qualidade mĂĄxima
    -

    Se definido como 100%, a optimização serå sem perdas.

    -

    Qualquer valor abaixo de 100% causarå redução de qualidade nos ficheiros, se parecerem ter sido guardados com uma definição de qualidade måxima mais elevada.

    -
    -
    -
    -pngout -

    PNGOUT

    -
    -
    Activado
    -

    Se assinalado, o ImageOptim irĂĄ tentar optimizar ficheiros PNG utilizando o PNGOUT. -

    O PNGOUT nĂŁo Ă© distribuĂ­do com o ImageOptim. É uma excelente ferramenta, mas o autor do PNGOUT proĂ­be a sua redistribuição, por isso terĂĄ de o descarregar manualmente.

    - -
    -
    Tipo de optimização
    -

    O PNGOUT é muito eficaz mas também muito lento. Utilize o nível mais baixo se for impaciente.

    - -
    Interromper se demorar demasiado tempo a executar
    -

    O PNGOUT poderå necessitar de imenso tempo para optimizar imagens muito grandes. Esta opção irå interromper discretamente o PNGOUT após 1 minuto.

    -
    +
    +

    Se definido como 100%, a optimização serå sem perdas.

    +

    Qualquer valor abaixo de 100% causarå redução de qualidade nos ficheiros, se parecerem ter sido guardados com uma definição de qualidade måxima mais elevada.

    +
    +
    -
    -advpng -

    AdvPNG

    -
    -
    Activado
    -

    Se assinalado, o ImageOptim irĂĄ tentar optimizar ficheiros PNG utilizando a ferramenta AdvPNG.

    - -
    -
    Nível de optimização
    -
    O AdvPNG Ă© relativamente rĂĄpido, por isso pode utilizar o nĂ­vel mĂĄximo.
    -
    -
    -
    -optipng -

    OptiPNG

    -
    -
    Activado
    -

    Se assinalado, o ImageOptim irĂĄ tentar optimizar ficheiros PNG utilizando a ferramenta OptiPNG.

    - -
    -
    Nível de optimização
    -

    O nĂșmero de diferentes combinaçÔes de definiçÔes que serĂŁo testadas. Raramente farĂĄ sentido testĂĄ-las todas.

    -
    Tornar imagens entrelaçada (progressivas)
    -

    As imagens entrelaçadas tĂȘm melhor aparĂȘncia quando estĂŁo parcialmenre carregadas, mas normalmente o entrelaçamento torna a compressĂŁo menos eficaz .

    -

    Esta caixa de verificação tem trĂȘs estados: se assinalada, irĂĄ forçar as imagens a tornarem-se entrelaçadas. Se no estado intermĂ©dio, irĂĄ manter os ficheiros inalterados em termos de entrelaçamento. Se desassinalado, irĂĄ removar entrelaçamento dos ficheiros.

    -
    +
    +

    PNGOUT

    +
    +
    Tipo de optimização
    +
    +

    O PNGOUT é muito eficaz mas também muito lento. Utilize o nível mais baixo se for impaciente.

    +
    +
    Interromper se demorar demasiado tempo a executar
    +
    +

    O PNGOUT poderå necessitar de imenso tempo para optimizar imagens muito grandes. Esta opção irå interromper discretamente o PNGOUT após 1 minuto.

    +
    +
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Activado
    -

    Se assinalado, o ImageOptim irĂĄ tentar optimizar ficheiros GIF utilizando a ferramenta Gifsicle. - -

    Ficheiros GIF serão alterados para entrelaçados ou não entrelaçados automaticamente, o que resultar num ficheiro menor. Comentårios no ficheiro serão removidos.

    -

    Por favor tenha em conta que o Gifsicle funciona melhor com GIFs animados e que GIFs nĂŁo-animados raramente podem ser optimizados.

    -

    Para melhor compressĂŁo, deve converter ficheiros GIF para PNGs (O ImageOptim nĂŁo o faz automaticamente).

    +
    +

    OxiPNG

    +
    +
    Nível de optimização
    +
    +

    O nĂșmero de diferentes combinaçÔes de definiçÔes que serĂŁo testadas. Raramente farĂĄ sentido testĂĄ-las todas.

    +
    +
    Tornar imagens entrelaçada (progressivas)
    +
    +

    As imagens entrelaçadas tĂȘm melhor aparĂȘncia quando estĂŁo parcialmenre carregadas, mas normalmente o entrelaçamento torna a compressĂŁo menos eficaz .

    +

    Esta caixa de verificação tem trĂȘs estados: se assinalada, irĂĄ forçar as imagens a tornarem-se entrelaçadas. Se no estado intermĂ©dio, irĂĄ manter os ficheiros inalterados em termos de entrelaçamento. Se desassinalado, irĂĄ removar entrelaçamento dos ficheiros.

    +
    +
    +
    +

    Gifsicle

    +

    Para melhor compressĂŁo, deve converter ficheiros GIF para PNGs (O ImageOptim nĂŁo o faz automaticamente).

    +
    + + diff --git a/imageoptim/pt.lproj/ImageOptim.strings b/imageoptim/pt.lproj/ImageOptim.strings new file mode 100644 index 00000000..8330c525 --- /dev/null +++ b/imageoptim/pt.lproj/ImageOptim.strings @@ -0,0 +1,180 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Passar tudo para a frente"; + +/* Menu Item "Window" */ +"19.title" = "Janela"; + +/* Menu Item "Minimize" */ +"23.title" = "Minimizar"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Janela"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Serviços"; + +/* Menu Item "Services" */ +"131.title" = "Serviços"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Ocultar o ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Sair do ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Ocultar outras aplicaçÔes"; + +/* Menu Item "Show All" */ +"150.title" = "Mostrar tudo"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lista de ficheiros a optimizar"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Ficheiro"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Tamanho"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Redução"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Acerca do ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "PreferĂȘncias
"; + +/* Menu Item "Edit" */ +"375.title" = "Edição"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Edição"; + +/* Menu Item "Select All" */ +"377.title" = "Seleccionar tudo"; + +/* Menu Item "Undo" */ +"378.title" = "Desfazer"; + +/* Menu Item "Redo" */ +"384.title" = "Refazer"; + +/* Menu Item "Cut" */ +"398.title" = "Cortar"; + +/* Menu Item "Copy" */ +"399.title" = "Copiar"; + +/* Menu Item "Paste" */ +"400.title" = "Colar"; + +/* Menu Item "Delete" */ +"402.title" = "Apagar"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Adicionar novos ficheiros ou directĂłrios"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Adicionar"; + +/* Menu Item "File" */ +"429.title" = "Ficheiro"; + +/* Top-level Main Menu "File" */ +"430.title" = "Ficheiro"; + +/* Menu Item "Add Files
" */ +"437.title" = "Adicionar ficheiros
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Estado da optimização"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Estado da optimização"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Fechar"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Ajuda"; + +/* Menu Item "Help" */ +"504.title" = "Ajuda"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Ajuda do ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Acerca do ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimizar novamente"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Procurar actualizaçÔes
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Arraste ficheiros de imagem para a tabela acima"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Executar optimizaçÔes novamente"; + +/* Button "Again" */ +"635.title" = "Repetir"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "versĂŁo"; + +/* TextFieldCell "version" */ +"646.title" = "versĂŁo"; + +/* Menu Item "Tools" */ +"655.title" = "Ferramentas"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Ferramentas"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Tamanho"; + +/* Menu Item "Savings" */ +"741.title" = "Redução"; + +/* Menu Item "Best tool" */ +"747.title" = "Ferramentas"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Ferramentas"; + +/* Menu Item "Original Size" */ +"791.title" = "Tamanho (original)"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Tamanho (original)"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Reverter para a versĂŁo original"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Qualidade: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Parar"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Copiar Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Apresentar no Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Minificação com perdas"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Apresentar no Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Estado"; + diff --git a/imageoptim/pt.lproj/Localizable.strings b/imageoptim/pt.lproj/Localizable.strings index 47792571..7e401f4d 100644 --- a/imageoptim/pt.lproj/Localizable.strings +++ b/imageoptim/pt.lproj/Localizable.strings @@ -1,14 +1,52 @@ +/* tooltip */ +"%@ failed to start" = "O %@ falhou ao iniciar"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Todas as ferramentas necessĂĄrias foram desactivadas nas PreferĂȘncias"; -"Can't map file into memory" = "NĂŁo Ă© possivel mapear o ficheiro para memĂłria"; + +/* tooltip, generic loading error */ +"Can't open the file" = "NĂŁo Ă© possivel mapear o ficheiro para memĂłria"; + +/* undo command name */ +"Cut" = "Cortar"; + +/* tooltip */ "File cannot be optimized any further" = "O ficheiro nĂŁo pode ser optimizado para alĂ©m do estado actual"; + +/* tooltip */ "File is neither PNG, GIF nor JPEG" = "O ficheiro nĂŁo Ă© PNG ou JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "O ImageOptim serĂĄ encerrado quando as otimizaçÔes terminarem"; + +/* tooltip */ "Inspecting file" = "A inspeccionar ficheiro"; + +/* newly added to the queue */ "New file" = "Novo ficheiro"; + +/* status bar */ +"Lossy minification enabled" = "Habilitada a minificação com perdas"; + +/* tooltip */ "Optimized file could not be saved" = "NĂŁo foi possĂ­vel guardar o ficheiro optimizado"; + +/* tooltip */ "Optimized successfully with %@" = "Optimizado com sucesso com o %@"; -"Size of optimized file is 0" = "O tamanho do ficheiro optimizado Ă© 0"; + +/* tooltip */ +"Reverted to original" = "Reverter para a versĂŁo original"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Salvo %1$@ de %2$@. %3$@ global (atĂ© %4$@ por ficheiro)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Salvo %1$@ de %2$@. %3$@ por ficheiro, em mĂ©dia( atĂ© %4$@)"; + +/* command name, tooltip */ "Started %@" = "Iniciado o %@"; -"Waiting in queue" = "A aguardar"; -"Waiting to be optimized" = "A aguardar para ser optimizado"; -"Waiting to start more optimizations" = "A aguardar para iniciar mais optimizaçÔes"; -"%@ failed to start" = "O %@ falhou ao iniciar"; \ No newline at end of file + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "A aguardar para iniciar mais optimizaçÔes"; + diff --git a/imageoptim/pt.lproj/MainMenu.xib b/imageoptim/pt.lproj/MainMenu.xib deleted file mode 100644 index f627e105..00000000 --- a/imageoptim/pt.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Estado da optimização - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Ficheiro - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Tamanho (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Tamanho - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Redução - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Ferramentas - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Arraste ficheiros de imagem para a tabela acima - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Add - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{426, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{450, 6}, {79, 25}} - - YES - - 67239424 - 134217728 - Repetir - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Executar optimizaçÔes novamente - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Acerca do ImageOptim - - 2147483647 - - - - - - Procurar actualizaçÔes - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - PreferĂȘncias
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Serviços - - 1048576 - 2147483647 - - - submenuAction: - - Serviços - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Ocultar o ImageOptim - h - 1048576 - 2147483647 - - - - - - Ocultar outras aplicaçÔes - h - 1572864 - 2147483647 - - - - - - Mostrar tudo - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Sair do ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Ficheiro - - 1048576 - 2147483647 - - - submenuAction: - - Ficheiro - - - - Adicionar ficheiros
 - o - 1048576 - 2147483647 - - - - - - Optimizar novamente - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Fechar - w - 1048576 - 2147483647 - - - - - - - - - Edição - - 1048576 - 2147483647 - - - submenuAction: - - Edição - - - - Desfazer - z - 1048576 - 2147483647 - - - - - - Refazer - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Cortar - x - 1048576 - 2147483647 - - - - - - Copiar - c - 1048576 - 2147483647 - - - - - - Colar - v - 1048576 - 2147483647 - - - - - - Apagar - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Seleccionar tudo - a - 1048576 - 2147483647 - - - - - - - - - Ferramentas - - 2147483647 - - - submenuAction: - - Ferramentas - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Janela - - 1048576 - 2147483647 - - - submenuAction: - - Janela - - - - Minimizar - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Passar tudo para a frente - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Tamanho (original) - - 2147483647 - - - - - - Tamanho - - 2147483647 - 1 - - - - - - Redução - - 2147483647 - 1 - - - - - - Ferramentas - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - Ajuda - - 1048576 - 2147483647 - - - submenuAction: - - Ajuda - - - - Ajuda do ImageOptim - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Acerca do ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - versĂŁo - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Tamanho - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Lista de ficheiros a optimizar - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Adicionar novos ficheiros ou directĂłrios - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Drop images here - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/pt.lproj/PrefsController.strings b/imageoptim/pt.lproj/PrefsController.strings new file mode 100644 index 00000000..217078fe --- /dev/null +++ b/imageoptim/pt.lproj/PrefsController.strings @@ -0,0 +1,54 @@ +/* The first prefs tab (misc/general) */ +"167.label" = "Geral"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Velicidade da otimização"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Qualidade"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Ao escrever ficheiros no disco"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Preservar permissĂ”es, atributos e hardlinks para ficheiros"; + +/* label in speed tab "Optimization level" */ +"818.title" = "NĂ­vel de optimização"; + +/* "Fast" */ +"819.title" = "RĂĄpida"; + +/* "Insane" */ +"820.title" = "Insano"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: Remover todos os pedaços opcionais"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Os browsers Web necessitam que os pedaços gama sejam removidos"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: qualidade"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: Remover marcadores EXIF e comentĂĄrios dos ficheiros"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata"; + +/* Header above list of tools to enable */ +"1107.title" = "Activado"; + + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF qualidade"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Cria arquivos mais pequenos, mas pode alterar a forma de como as imagens aparecem"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: qualidade"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Ativar a minificação com perdas"; diff --git a/imageoptim/pt.lproj/PrefsController.xib b/imageoptim/pt.lproj/PrefsController.xib deleted file mode 100644 index 1982fc90..00000000 --- a/imageoptim/pt.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11C74 - 1938 - 1138.23 - 567.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim Preferences - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - Preservar permissĂ”es, atributos e hardlinks para ficheiros - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Criar cĂłpia de segurança do ficheiro original antes de guardar - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Ao escrever ficheiros no disco - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Remover todos os pedaços opcionais - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - Os browsers Web necessitam que os pedaços gama sejam removidos - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Remover marcadores EXIF e comentĂĄrios dos ficheiros - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Activado - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - Geral - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Tipo de optimização - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Simples - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Extrema - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Intensa - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - CorrespondĂȘncia mais longa - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Tentar vĂĄrios filtros diferentes - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Interromper se demorar demasiado tempo a executar - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - Tornar imagens entrelaçada (progressivas) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - NĂ­vel de optimização - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - Ficheiros interlaçados sĂŁo normalmente maiores - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 tentativas - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 tentativas - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - NĂ­vel de optimização - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - RĂĄpida - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Insano - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Qualidade mĂĄxima - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/release.xcconfig b/imageoptim/release.xcconfig index 13cdd624..b8e63c3f 100644 --- a/imageoptim/release.xcconfig +++ b/imageoptim/release.xcconfig @@ -1,34 +1,69 @@ +CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO ALWAYS_SEARCH_USER_PATHS = NO; -ARCHS = i386 x86_64; -VALID_ARCHS = i386 x86_64; +ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = NO; DEAD_CODE_STRIPPING = YES; DEPLOYMENT_POSTPROCESSING = YES; -GCC_AUTO_VECTORIZATION = YES; -GCC_C_LANGUAGE_STANDARD = c99; GCC_FAST_MATH = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_INLINES_ARE_PRIVATE_EXTERN = YES; -GCC_MODEL_TUNING[arch=i386] = -mtune=pentium-m; -GCC_MODEL_TUNING[arch=x86_64] = -mtune=core2; GCC_PREPROCESSOR_DEFINITIONS = NDEBUG NS_BLOCK_ASSERTIONS; GCC_STRICT_ALIASING = YES; +ENABLE_HARDENED_RUNTIME = YES; +ENABLE_STRICT_OBJC_MSGSEND = YES; +ENABLE_TESTABILITY = YES; +ENABLE_USER_SCRIPT_SANDBOXING = NO; +CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; +CLANG_ANALYZER_NONNULL = YES; +CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; +CLANG_ENABLE_MODULES = YES; +CLANG_ENABLE_OBJC_ARC = YES; +CLANG_ENABLE_OBJC_WEAK = YES; +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; +CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; +CLANG_WARN_BOOL_CONVERSION = YES; +CLANG_WARN_COMMA = YES; +CLANG_WARN_CONSTANT_CONVERSION = YES; +CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; +CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; +CLANG_WARN_DOCUMENTATION_COMMENTS = YES; +CLANG_WARN_EMPTY_BODY = YES; +CLANG_WARN_ENUM_CONVERSION = YES; +CLANG_WARN_INFINITE_RECURSION = YES; +CLANG_WARN_INT_CONVERSION = YES; +CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; +CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; +CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; +CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; +CLANG_WARN_STRICT_PROTOTYPES = YES; +CLANG_WARN_SUSPICIOUS_MOVE = YES; +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; +CLANG_WARN_UNREACHABLE_CODE = YES; +GCC_NO_COMMON_BLOCKS = YES; +GCC_WARN_64_TO_32_BIT_CONVERSION = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES; +GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; -GCC_WARN_UNINITIALIZED_AUTOS = YES; +GCC_WARN_UNDECLARED_SELECTOR = YES; +GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_LABEL = YES; GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; -MACOSX_DEPLOYMENT_TARGET = 10.6.8; +MACOSX_DEPLOYMENT_TARGET = 10.15; +MTL_ENABLE_DEBUG_INFO = NO; +MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = NO; DEBUG_INFORMATION_FORMAT = dwarf-with-dsym PLIST_FILE_OUTPUT_FORMAT = binary; SDKROOT = macosx; STRINGS_FILE_OUTPUT_ENCODING = UTF-8; - -DEAD_CODE_STRIPPING = NO; -COPY_PHASE_STRIP = NO; -STRIP_STYLE = debugging; -DEPLOYMENT_POSTPROCESSING = NO; -DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT = YES; -DWARF_DSYM_FILE_NAME = $(EXECUTABLE_NAME)debug.dSYM; +COPY_PHASE_STRIP = YES; +LD_RUNPATH_SEARCH_PATHS = @loader_path/../Frameworks +COMBINE_HIDPI_IMAGES = NO; +CODE_SIGN_STYLE = Automatic; +CODE_SIGN_IDENTITY = Apple Development; +DEAD_CODE_STRIPPING = YES; +MARKETING_VERSION = $(CURRENT_PROJECT_VERSION); +CURRENT_PROJECT_VERSION=1.9.3; diff --git a/imageoptim/reveal.png b/imageoptim/reveal.png deleted file mode 100644 index d802a5ca..00000000 Binary files a/imageoptim/reveal.png and /dev/null differ diff --git a/imageoptim/ro.lproj/Help/index.html b/imageoptim/ro.lproj/Help/index.html new file mode 100644 index 00000000..011e1f21 --- /dev/null +++ b/imageoptim/ro.lproj/Help/index.html @@ -0,0 +1,60 @@ + + + + +Codestin Search App + + + + + + + +

    ImageOptim

    +

    Cum se foloseßte

    +
      +
    1. GlisaĆŁi ßi plasaĆŁi fißiere PNG or JPEG  sau foldere Ăźn fereastra principală Ăźn ImageOptim.
    2. +
    3. AƟteptaƣi pünă cünd se termină.
    4. +
    5. Profit! (din fißiere mici)
    6. +
    +

    Fißierele vor fi suprascrise cu variate mai mici. Variantele neoptimizate vor fi mutate la Coßul de gunoi.

    +

    PuteĆŁi de asemenea  plasa fißierele  pe iconul ImageOptim's din Dock.

    +

    Învăƣaƣi cum să schimbaƣi Preferinƣele.

    +

    Iconuri ün tabelul fiƟierelor

    + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkImaginea a fost optimizată cu succes.
    Green XTotul a decurs bine, dar imaginea nu a putut fi optimizată mai departe.
    Gray starOptimizarea acestui fiƟier este ün curs.
    Gray dotsFiƟierul este ün aƟteptare pentru a fi optimizat după ce sünt terminate celelalte fiƟiere.
    Orange exclamation markA avut loc o eroare ßn timpul optimizării. Veƣi găsi explicaƣia rulßnd Console.app.
    +

    Cum funcƣionează

    +

    ImageOptim este o interfaƣă grafică (GUI) pentru aceste aplicaƣii:

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • ßi PNGOUT.
    • +
    +

    ImageOptim le rulează ßi selectează automat cel mai mic fißier.

    + + diff --git a/imageoptim/ro.lproj/Help/prefs.html b/imageoptim/ro.lproj/Help/prefs.html new file mode 100644 index 00000000..d4484c7f --- /dev/null +++ b/imageoptim/ro.lproj/Help/prefs.html @@ -0,0 +1,78 @@ + + + + +Codestin Search App + + + + + + + +

    PreferinĆŁe ImageOptim

    +

    « Înapoi la index

    +

    PreferinĆŁe generale

    +
    +
    Păstrează permisiunile fißierelor, atributele ßi legăturile hard
    +
    +

    În loc de Ɵtergerea vechiului fiƟier Ɵi scrierea unuia nou cu acelaƟi nume doar ünlocuieƟte pe loc conƣinutul celui vechi. Aceasta asigură că toate legăturile hard, aliasurile, proprietatea fiƟierului, permisiunile, atributele etinse ale fiƟierului rămün aceleaƟi.

    +

    Este un pic mai rapid nepăstrarea permisiunilor.

    +
    +
    Taie metadate PNG (gamma, profile de culoare, bucăƣi optionale)
    +
    +

    FiƟierele PNG pot avea luminozităƣi Ɵi saturaƣii diferite ün browsere diferite, pentru că nu toate browserele suporta corecƣia gamma Ɵi profilurile de culoare ün mod egal. Eliminarea acestor informaƣii face culoarea PNG mai consistentă ün browsere Ɵi reduce dimensiunea fiƟierului.

    +

    Celelalte informaƣii invizibile sünt de asemenea ünlăturate, cum ar fi DPI Ɵi comentariile.

    +
    +
    Taie metadate JPEG (EXIF, profile de culoare, GPS, rotaĆŁie, etc.)
    +
    +

    Înlătură metadate imagine, cum ar fi profilul de culoare, timpul de expunrere, coordonatele GPS, model aparat Ɵi numele programului folosit pentru a crea fiƟierul.

    +

    Informaƣiile de copyright ßncorporate sßnt e asemenea ßnlăturate. Vă rugăm să reƣineƣi faptul că ßn general imaginile sßnt protejate de legea drepturilor de autor indiferent dacă ele conƣin asemenea metadate invizibile sau nu.

    +
    +
    +

    Unelte

    +

    Zopfli Ɵi PNGOUT sünt compresoare PNG foarte bune, dar sünt foarte lente. Dezactivaƣi-le dacă aveƣi nevoie să optimizaƣi rapid fiƟierele PNG (lăsaƣi doar AdvPNG pentru rapiditate Ɵi bună compresie).

    +

    Zopfli Ɵi OptiPNG vor curăƣa valorile RGB a pixelilor transparenƣi (cunoscuƣi ca “dirty alpha”). Dezactivaƣi aceste două unelte dacă optimizaƣi fiƟiere speciale care folosesc canalul alfa pentru altceva decüt transparenƣă (e.g. hartă ünălƣime ün fiƟierele de date ale jocurilor).

    +
    +

    JPEGOptim

    +
    +
    Calitate maximă
    +
    +

    Dacă este setat la 100%, optimizarea va fi fără pierderi.

    +

    Orice sub 100% va cauza o calitate inferioară a fiƟierelor ün cazul ün care par să fi fost salvate cu setare de calitate superioară.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Tip de optimizare
    +
    +

    PNGOUT este foarte eficient, dar foarte lent. Folosiƣi un nivel inferior dacă sßnteƣi nerăbdător.

    +
    +
    Întrerupe dacă durează prea mult
    +
    +

    PNGOUT poate avea nevoie de foarte mult timp pentru a optimiza imagini foarte mari. Această opƣiune ßntrerupe elegant PNGOUT după 1 minut.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Nivel optimizare
    +
    +

    Number of different setting combinations tested. It rarely makes sense to try them all.

    +
    +
    Face imaginile ĂźntreĆŁesute (progresiv)
    +
    +

    Imaginile ßntreƣesute arată mai bine cßnd sßnt ßncărcate parƣial, dar de obicei ßntreƣererea face compresia mai puƣin eficientă.

    +

    Această casetă are trei stări: dacă este bifată, va forƣa iamginile să fie üntreƣesute. Dacă este mixă, va păstra üntreƣeserea fiƟierului neschimbată, defifată va ünătura üntreƣeserea din fiƟier.

    +
    +
    +
    +
    +

    Gifsicle

    +

    Pentru cea mai bună compresie, ar trebui să convertiƣi fiƟierele GIF ün PNG-uri (ImageOptim nu face asta automat).

    +
    + + diff --git a/imageoptim/ro.lproj/ImageOptim.strings b/imageoptim/ro.lproj/ImageOptim.strings new file mode 100644 index 00000000..794d14e1 --- /dev/null +++ b/imageoptim/ro.lproj/ImageOptim.strings @@ -0,0 +1,213 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Aduce toate ün faƣă"; + +/* Menu Item "Window" */ +"19.title" = "Fereastră"; + +/* Menu Item "Minimize" */ +"23.title" = "Minimizează"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Fereastră"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Servicii"; + +/* Menu Item "Services" */ +"131.title" = "Servicii"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Ascunde ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "Închidere ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Ascunde celelalte"; + +/* Menu Item "Show All" */ +"150.title" = "Arată toate"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lista fiƟierelor de optimizat"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "FiƟier"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Mărime"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Mărimea fiƟierului după optimizare"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Mărimea fiƟierului după optimizare"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Salvat"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Stare"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Despre ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Preferinƣe..."; + +/* Menu Item "Edit" */ +"375.title" = "Editare"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Editare"; + +/* Menu Item "Select All" */ +"377.title" = "Selectează tot"; + +/* Menu Item "Undo" */ +"378.title" = "Anulare"; + +/* Menu Item "Redo" */ +"384.title" = "Refacere"; + +/* Menu Item "Cut" */ +"398.title" = "Tăriere"; + +/* Menu Item "Copy" */ +"399.title" = "Copiere"; + +/* Menu Item "Paste" */ +"400.title" = "Lipire"; + +/* Menu Item "Delete" */ +"402.title" = "ƞtergere"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Adaugă fiƟiere sau foldere noi"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Adaugă"; + +/* Menu Item "File" */ +"429.title" = "FiƟier"; + +/* Top-level Main Menu "File" */ +"430.title" = "FiƟier"; + +/* Menu Item "Add Files
" */ +"437.title" = "Adaugă fiƟiere..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Stare optimizare"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Stare optimizare"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Închide fereastra"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Ajutor"; + +/* Menu Item "Help" */ +"504.title" = "Ajutor"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Ajutor ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Despre ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimizează din nou"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Verificare actualizări..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Glisaƣi Ɵi plasaƣi imaginile ün zona de sus"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Rulează optimizările din nou"; + +/* Button "Again" */ +"635.title" = "DIn nou"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Stare"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "versiune"; + +/* TextFieldCell "version" */ +"646.title" = "versiune"; + +/* Menu Item "Tools" */ +"655.title" = "Unelte"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Unelte"; + +/* Menu Item "Quick Look" */ +"708.title" = "Privire rapidă"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Plasaƣi fiƟierele aici"; + +/* Menu Item "Delete Completed" */ +"721.title" = "ƞtergere completată"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimizare optimizate"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "Site web ImageOptim"; + +/* Menu Item "View Source" */ +"735.title" = "Vizualizare sursă"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Mărime optimizat"; + +/* Menu Item "Savings" */ +"741.title" = "Salvat"; + +/* Menu Item "Best tool" */ +"747.title" = "Cea mai bună unealtă"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "Cea mai bună unealtă"; + +/* Menu Item "Original Size" */ +"791.title" = "Mărime originală"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Mărime originală"; + +/* Menu Item "Show Columns" */ +"809.title" = "Arată coloane"; + +/* Menu Item "Donate" */ +"820.title" = "Donaƣi"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Revine la original"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Calitate: 100%"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Copiază ca date URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Arată ün Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Minimizare cu pierderi"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Arată ün Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Stare"; + diff --git a/imageoptim/ro.lproj/Localizable.strings b/imageoptim/ro.lproj/Localizable.strings new file mode 100644 index 00000000..49798665 --- /dev/null +++ b/imageoptim/ro.lproj/Localizable.strings @@ -0,0 +1,55 @@ +/* tooltip */ +"%@ failed to start" = "%@ nu s-a putut üncepe"; + +/* undo command name */ +"Add" = "Adaugă"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Toate uneltele necesare au fost dezactivate ün Preferinƣe"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Nu se poate mapa fiƟierul ün memorie"; + +/* undo command name */ +"Cut" = "Tăriere"; + +/* tooltip */ +"File cannot be optimized any further" = "FiƟierul nu mai poate fi optimizat mai mult"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "FiƟierul nu este PNG, GIF Ɵi nici JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim se va ünchide cünd optimizările sünt complete"; + +/* tooltip */ +"Inspecting file" = "Inspectare fiƟier"; + +/* newly added to the queue */ +"New file" = "FiƟier nou"; + +/* status bar */ +"Lossy minification enabled" = "Minimizare cu pierderi activată"; + +/* tooltip */ +"Optimized file could not be saved" = "FiƟierul optimizat nu a putut fi salvat"; + +/* tooltip */ +"Optimized successfully with %@" = "Optimizat cu succes cu %@"; + +/* tooltip */ +"Reverted to original" = "Revenit la original"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Salvat %1$@ din %2$@. %3$@ global (pünă la %4$@ per fiƟier)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Salvat%1$@ din %2$@. %3$@ per fiƟier ün medie (pünă la %4$@)"; + +/* command name, tooltip */ +"Started %@" = "Pornit %@"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "AƟteptare pentru üncepere mai multe optimizări"; + diff --git a/imageoptim/ro.lproj/PrefsController.strings b/imageoptim/ro.lproj/PrefsController.strings new file mode 100644 index 00000000..3a0fca4b --- /dev/null +++ b/imageoptim/ro.lproj/PrefsController.strings @@ -0,0 +1,59 @@ +/* Window title */ +"5.title" = "Preferinƣe ImageOptim"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Viteză optimizare"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Calitate"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Scriere fiƟiere pe disc"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Păstrează permisiunile fiƟierelor, atributele Ɵi legăturile hard"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Nivel optimizare"; + +/* "Fast" */ +"819.title" = "Rapid"; + +/* "Insane" */ +"820.title" = "Demenƣial"; + +/* Checkbox in Preferences */ +"854.title" = "Taie metadate PNG (gamma, profile de culoare, bucăƣi optionale)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Navigatoarele web necesită ündepărtarea bucăƣilor gamma"; + +/* label "JPEG quality" */ +"868.title" = "Calitate JPEG"; + +/* Checkbox in Preferences */ +"911.title" = "Taie metadate JPEG (EXIF, profile de culoare, GPS, rotaƣie, etc.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metatdate Ɵi profil de culoare"; + +/* Header above list of tools to enable */ +"1107.title" = "Activează"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Salvarea către unităƣile de reƣea este mai rapidă atunci cünd permisiunile nu sünt păstrate"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "Nerecomandat dacă vă bazaƣi pe informaƣii de copyright üncorporate"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "Calitate GIF"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Face fiƟierele mult mai mici, dar poate schimba aspectul imaginilor"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "Calitate PNG"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "Activează minificarea cu pierderi"; diff --git a/imageoptim/ru.lproj/Credits.html b/imageoptim/ru.lproj/Credits.html new file mode 100644 index 00000000..969fe641 --- /dev/null +++ b/imageoptim/ru.lproj/Credits.html @@ -0,0 +1,29 @@ +

    ImageOptim ĐšĐŸŃ€ĐœĐ”Đ»Đ° Đ›Đ”ŃĐžĐœŃĐșĐž (Kornel LesiƄski) Đž Юругох ŃƒŃ‡Đ°ŃŃ‚ĐœĐžĐșĐŸĐČ ŃĐČĐ»ŃĐ”Ń‚ŃŃ ĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°Ń‚Đ”Đ»ŃŒŃĐșĐžĐŒ ĐžĐœŃ‚Đ”Ń€Ń„Đ”ĐčŃĐŸĐŒ ĐŽĐ»Ń ŃƒŃ‚ĐžĐ»ĐžŃ‚ Юругох Ń€Đ°Đ·Ń€Đ°Đ±ĐŸŃ‚Ń‡ĐžĐșĐŸĐČ:

    +
      +
    • +OxiPNG ĐšĐŸŃĐŒĐžĐœĐ° бруты (Josh Holmer),
    • +
    • +pngquant by Kornel LesiƄski,
    • +
    • +PNGCrush Đ“Đ»Đ”ĐœĐœĐ° Đ Đ°ĐœĐŽĐ”Ń€Ń-ĐŸĐ”Ń€ŃĐŸĐœĐ° (Glenn Randers-Pehrson),
    • +
    • +MozJPEG by Mozilla and contributors,
    • +
    • +Guetzli, Zopfli мрĐșĐž АлаĐșуĐčхала (Jyrki Alakuijala), Đ›ĐŸĐŽĐ° Đ’Đ°ĐœĐŽĐ”ĐČĐ”ĐœĐœĐ° (Lode Vandevenne),
    • +
    • +AdvPNG ĐĐœĐŽŃ€Đ”Đ° ĐœĐ°Ń†Ń†ĐŸĐ»Đ”ĐœĐž (Andrea Mazzoleni), ЀОллОпа Đ­ŃŃ‚ĐžĐŒĐ° (Filipe Estima),
    • +
    • +Jpegoptim ĐąĐžĐŒĐŸ ĐšĐŸĐșĐșĐŸĐœĐ”ĐœĐ° (Timo Kokkonen),
    • +
    • +Gifsicle Đ­ĐŽĐŽĐž ĐšĐŸĐ»Đ”Ń€Đ° (Eddie Kohler),
    • +
    • +SVGO Kir Belevich,
    • +
    • +svgcleaner Evgeniy Reizner,
    • +
    • +Đž PNGOUT ĐšĐ”ĐœĐ° ĐĄĐžĐ»ŃŒĐČĐ”Ń€ĐŒĐ°ĐœĐ° (Ken Silverman).
    • +
    +
    +

    ImageOptim ĐŒĐŸĐ¶Đ”Ń‚ Ń€Đ°ŃĐżŃ€ĐŸŃŃ‚Ń€Đ°ĐœŃŃ‚ŃŒŃŃ Đž ĐżĐŸĐŽĐČĐ”Ń€ĐłĐ°Ń‚ŃŒŃŃ ĐžĐ·ĐŒĐ”ĐœĐ”ĐœĐžŃĐŒ ĐČ ŃĐŸĐŸŃ‚ĐČДтстĐČОО с Đ»ĐžŃ†Đ”ĐœĐ·ĐžĐ”Đč GNU General Public License 2 ОлО ĐżĐŸĐ·ĐŽĐœĐžĐŒĐž рДЎаĐșŃ†ĐžŃĐŒĐž. +ВĐșĐ»ŃŽŃ‡Ń‘ĐœĐœŃ‹Đč ĐČ ŃĐŸŃŃ‚Đ°ĐČ ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒŃ‹ PNGOUT ĐœĐ” ĐžĐŒĐ”Đ”Ń‚ Đ»ĐžŃ†Đ”ĐœĐ·ĐžĐž GPL Đž ĐČĐșĐ»ŃŽŃ‡Đ”ĐœĐ° ĐČ ĐŸĐž с Ń€Đ°Đ·Ń€Đ”ŃˆĐ”ĐœĐžŃ Ardfry Imaging, LLC.

    +

    РуссĐșĐžĐč пДрДĐČĐŸĐŽ: Millennium, КашĐșĐ”ĐČоч АлДĐșŃĐ°ĐœĐŽŃ€

    diff --git a/imageoptim/ru.lproj/Credits.rtf b/imageoptim/ru.lproj/Credits.rtf deleted file mode 100644 index 383d498c..00000000 --- a/imageoptim/ru.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww15260\viewh11520\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 by Kornel Lesi\uc0\u324 ski and contributors is a GUI for 3rd party utilities:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} by Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} by Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} by Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} by Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} by Eddie Kohler,\ -{\listtext \'95 }and {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} by Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim can be redistributed and modified under {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License version 2 or later}}. Bundled PNGOUT is -\b not -\b0 covered by the GPL and is included with permission of Ardfry Imaging, LLC.\ -\uc0\u1055 \u1077 \u1088 \u1077 \u1074 \u1086 \u1076 \u1085 \u1072 \u1088 \u1091 \u1089 \u1089 \u1082 \u1080 \u1081 {\field{\*\fldinst{HYPERLINK "http://iMan.in.UA/"}}{\fldrslt Nicom}}.} \ No newline at end of file diff --git a/imageoptim/ru.lproj/Help/Help.helpindex b/imageoptim/ru.lproj/Help/Help.helpindex deleted file mode 100644 index 42a6e396..00000000 Binary files a/imageoptim/ru.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/ru.lproj/Help/index.html b/imageoptim/ru.lproj/Help/index.html index fba18998..5748019c 100644 --- a/imageoptim/ru.lproj/Help/index.html +++ b/imageoptim/ru.lproj/Help/index.html @@ -1,78 +1,64 @@ - - - + + - - - Codestin Search App - - - - - - - + +Codestin Search App + + + + - ГлаĐČĐœĐ°Ń - -

    ImageOptim

    +

    ImageOptim

    КаĐș ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать

      -
    1. ĐŸĐ”Ń€Đ”Ń‚ŃĐœĐžŃ‚Đ” PNG фаĐčĐ», JPEG фаĐčлы ОлО папĐșу ĐČ ĐłĐ»Đ°ĐČĐœĐŸĐ” ĐŸĐșĐœĐŸ ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒŃ‹ ImageOptim.
    2. +
    3. ĐŸĐ”Ń€Đ”Ń‚ŃĐœĐžŃ‚Đ” PNG ОлО JPEG фаĐčлы ОлО папĐșĐž ĐČ ĐłĐ»Đ°ĐČĐœĐŸĐ” ĐŸĐșĐœĐŸ ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒŃ‹ ImageOptim.
    4. -
    5. Đ”ĐŸĐ¶ĐŽĐžŃ‚Đ”ŃŃŒ ĐŸĐșĐŸĐœŃ‡Đ°ĐœĐžŃ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž.
    6. +
    7. Đ”ĐŸĐ¶ĐŽĐžŃ‚Đ”ŃŃŒ ĐŸĐșĐŸĐœŃ‡Đ°ĐœĐžŃ.
    8. -
    9. Đ€ĐžĐœĐžŃˆ! (фаĐčлы ŃƒĐŒĐ”ĐœŃŒŃˆĐžĐ»ĐžŃŃŒ ĐČ Ń€Đ°Đ·ĐŒĐ”Ń€Đ”)
    10. +
    11. ĐŸŃ€ĐŸŃ„ĐžŃ‚! (фаĐčлы ŃƒĐŒĐ”ĐœŃŒŃˆĐžĐ»ĐžŃŃŒ ĐČ Ń€Đ°Đ·ĐŒĐ”Ń€Đ”)
    +

    Вы таĐș жД ĐŒĐŸĐ¶Đ”Ń‚Đ” ĐżĐ”Ń€Đ”Ń‚ŃĐłĐžĐČать фаĐčлы ĐœĐ° Đ·ĐœĐ°Ń‡Đ”Đș ImageOptim ĐČ Dock.

    -

    йаĐș жД ĐČы ĐŒĐŸĐ¶Đ”Ń‚Đ” ĐżĐ”Ń€Đ”Ń‚ŃĐłĐžĐČать фаĐčлы Đž папĐșĐž ĐœĐ° Đ·ĐœĐ°Ń‡Đ”Đș ImageOptim ĐČ Dock.

    - -

    ĐŸĐŸŃĐŒĐŸŃ‚Ń€ĐžŃ‚Đ” ĐșаĐș ĐŒĐŸĐ¶ĐœĐŸ ĐžĐ·ĐŒĐ”ĐœĐžŃ‚ŃŒ ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž.

    +

    ĐŁĐ·ĐœĐ°ĐčтД ĐșаĐș ĐŒĐŸĐ¶ĐœĐŸ ĐžĐ·ĐŒĐ”ĐœĐžŃ‚ŃŒ ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž.

    -

    ĐžĐ±ĐŸĐ·ĐœĐ°Ń‡Đ”ĐœĐžŃ ĐČ Ń‚Đ°Đ±Đ»ĐžŃ†Đ” ĐŸĐșĐœĐ°

    +

    ИĐșĐŸĐœĐșĐž ĐČ Ń‚Đ°Đ±Đ»ĐžŃ†Đ” фаĐčĐ»ĐŸĐČ

    - - + + - + + + - - - - + - - - + + + + - - - - + + + - - - - + -
    Green Checkmark
    Đ—Đ”Đ»Đ”ĐœĐ°Ń ĐłĐ°Đ»ĐŸŃ‡ĐșĐ°Đ˜Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžĐ” Đ±Ń‹Đ»ĐŸ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐŸ ŃƒŃĐżĐ”ŃˆĐœĐŸ.Đ˜Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžĐ” Đ±Ń‹Đ»ĐŸ ŃƒŃĐżĐ”ŃˆĐœĐŸ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐŸ.
    Đ—Đ”Đ»Đ”ĐœŃ‹Đč ĐșрДст
    Green XВсД ĐżĐŸŃˆĐ»ĐŸ прДĐșŃ€Đ°ŃĐœĐŸĐ”, ĐœĐŸ ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžĐ” ĐœĐ” ĐŒĐŸĐłĐ»ĐŸ Đ±Ń‹Ń‚ŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐŸ Đ±ĐŸĐ»Đ”Đ”.ВсД ĐżŃ€ĐŸŃˆĐ»ĐŸ Ń…ĐŸŃ€ĐŸŃˆĐŸ, ĐœĐŸ ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžĐ” ĐœĐ” ĐżĐŸĐ»ŃƒŃ‡Đ°Đ”Ń‚ŃŃ ŃĐŽĐ”Đ»Đ°Ń‚ŃŒ Đ±ĐŸĐ»Đ”Đ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœŃ‹ĐŒ.
    Gray star
    ĐĄĐ”Ń€Đ°Ń Đ·ĐČДзЎа ĐžĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžŃ ŃŃ‚ĐŸĐłĐŸ фаĐčла ĐČ ĐżŃ€ĐŸŃ†Đ”ŃŃĐ”.
    ХДрыД Ń‚ĐŸŃ‡ĐșĐž
    Gray dotsЀаĐčĐ» ĐżĐŸŃŃ‚Đ°ĐČĐ»Đ”Đœ ĐČ ĐŸŃ‡Đ”Ń€Đ”ĐŽŃŒ, Ń‡Ń‚ĐŸĐ±Ń‹ Đ±Ń‹Ń‚ŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœŃ‹ĐŒ ĐżĐŸŃĐ»Đ” Ń‚ĐŸĐłĐŸ, ĐșаĐș ĐŽŃ€ŃƒĐłĐžĐ” фаĐčлы Đ±ŃƒĐŽŃƒŃ‚ ĐŸĐ±Ń€Đ°Đ±ĐŸŃ‚Đ°ĐœŃ‹.ЀаĐčĐ» ĐČ ĐŸŃ‡Đ”Ń€Đ”ĐŽĐž Đž Đ±ŃƒĐŽĐ”Ń‚ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°Đœ ĐżĐŸŃĐ»Đ” Ń‚ĐŸĐłĐŸ, ĐșаĐș заĐșĐŸĐœŃ‡Đ°Ń‚ ĐŸŃŃ‚Đ°Đ»ŃŒĐœŃ‹Đ” фаĐčлы.
    ĐžŃ€Đ°ĐœĐ¶Đ”ĐČыĐč ĐČĐŸŃĐșĐ»ĐžŃ†Đ°Ń‚Đ”Đ»ŃŒĐœŃ‹Đč Đ·ĐœĐ°Đș
    Orange exclamation markĐ’ĐŸ ĐČŃ€Đ”ĐŒŃ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž ĐżŃ€ĐŸĐžĐ·ĐŸŃˆĐ»Đ° ĐŸŃˆĐžĐ±Đșа. Вы ĐœĐ°ĐčЎДтД ĐŸĐ±ŃŠŃŃĐœĐ”ĐœĐžĐ” ĐČ ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐ” ĐšĐŸĐœŃĐŸĐ»ŃŒ.app.Đ’ĐŸ ĐČŃ€Đ”ĐŒŃ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž ĐżŃ€ĐŸĐžĐ·ĐŸŃˆĐ»Đ° ĐŸŃˆĐžĐ±Đșа. Вы ĐœĐ°ĐčЎДтД ĐŸĐ±ŃŠŃŃĐœĐ”ĐœĐžĐ”, Đ·Đ°ĐżŃƒŃŃ‚ĐžĐČ ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐ” ĐšĐŸĐœŃĐŸĐ»ŃŒ.
    + +

    КаĐș ŃŃ‚ĐŸ Ń€Đ°Đ±ĐŸŃ‚Đ°Đ”Ń‚

    -

    КаĐș ŃŃ‚ĐŸ Ń€Đ°Đ±ĐŸŃ‚Đ°Đ”Ń‚

    - -

    ImageOptim яĐČĐ»ŃĐ”Ń‚ŃŃ GUI (графОчДсĐșĐžĐč ĐžĐœŃ‚Đ”Ń€Ń„Đ”Đčс ĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°Ń‚Đ”Đ»Ń) ĐŽĐ»Ń этох ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč:

    +

    ImageOptim яĐČĐ»ŃĐ”Ń‚ŃŃ графОчДсĐșĐžĐŒ ĐžĐœŃ‚Đ”Ń€Ń„Đ”ĐčŃĐŸĐŒ ĐŽĐ»Ń этох ĐżŃ€ĐžĐ»ĐŸĐ¶Đ”ĐœĐžĐč:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +66,10 @@

      КаĐș ŃŃ‚ĐŸ Ń€Đ°Đ±ĐŸŃ‚Đ°Đ”Ń‚

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • Đž ĐŸĐżŃ†ĐžĐŸĐœĐ°Đ»ŃŒĐœĐŸ PNGOUT.
    - -

    ImageOptim запусĐșаДт ох Đž аĐČŃ‚ĐŸĐŒĐ°Ń‚ĐžŃ‡Đ”ŃĐșĐž ĐČыбОраДт ĐŒĐ°Đ»Đ”ĐœŃŒĐșОД фаĐčлы.

    +

    ImageOptim запусĐșаДт ох Đž аĐČŃ‚ĐŸĐŒĐ°Ń‚ĐžŃ‡Đ”ŃĐșĐž ĐČыбОраДт ŃĐ°ĐŒŃ‹Đč ĐŒĐ°Đ»Đ”ĐœŃŒĐșĐžĐč фаĐčĐ».

    diff --git a/imageoptim/ru.lproj/Help/prefs.html b/imageoptim/ru.lproj/Help/prefs.html index 39c7eacb..024ce0b3 100644 --- a/imageoptim/ru.lproj/Help/prefs.html +++ b/imageoptim/ru.lproj/Help/prefs.html @@ -1,105 +1,77 @@ - - -Codestin Search App + + + + +Codestin Search App - - - - - -general -

    ImageOptim Preferences

    -

    « Back to index

    -

    You shouldn't need to change any of these.

    -

    General preferences

    -
    -
    Preserve file permissions, attributes and hardlinks
    -
    -

    Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. -

    It's slightly faster not to preserve permissions. -

    -
    Backup original files before saving
    -

    Will write copy of a file with ~ appended to its name. This makes optimization a bit slower and litters your disk with backup files.

    - -
    Remove optional chunks
    -

    Keep it on if you optimize for web. Disable if you have special PNGs with extra metadata.

    - -
    Strip EXIF markers from files
    -

    Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. Metadata is never removed from JPEG files larger than 1.3MB.

    -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize JPEG files.

    - -
    Maximum quality
    -

    If set to 100%, optimization will be lossless.

    -

    Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting.

    + -
    -
    -
    -pngout -

    PNGOUT

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using PNGOUT. -

    PNGOUT is not bundled with ImageOptim. It's a great tool, but and author of PNGOUT forbids redistribution of it, so you have to download PNGOUT yourself.

    - -
    -
    Optimization type
    -

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    - -
    Interrupt if takes too long
    -

    PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute.

    -
    -
    -
    -advpng -

    AdvPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using AdvPNG tool.

    - -
    -
    Optimization level
    -
    AdvPNG is relatively fast, so you can use maximum level.
    -
    + + +

    ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž ImageOptim

    +

    « На глаĐČĐœŃƒŃŽ

    +

    ĐžŃĐœĐŸĐČĐœŃ‹Đ” ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž

    +
    +
    ĐĄĐŸŃ…Ń€Đ°ĐœŃŃ‚ŃŒ Ń€Đ°Đ·Ń€Đ”ŃˆĐ”ĐœĐžŃ, Đ°Ń‚Ń€ĐžĐ±ŃƒŃ‚Ń‹ Đž ссылĐșĐž
    +
    +

    Đ’ĐŒĐ”ŃŃ‚ĐŸ ŃƒĐŽĐ°Đ»Đ”ĐœĐžŃ ŃŃ‚Đ°Ń€ĐŸĐłĐŸ фаĐčла Đ·Đ°ĐżĐžŃŃŒ ĐČ ĐœĐŸĐČыĐč с Ń‚Đ”ĐŒ жД ĐžĐŒĐ”ĐœĐ”ĐŒ, ĐżŃ€ĐŸŃŃ‚ĐŸ Đ·Đ°ĐŒĐ”ĐœŃĐ”Ń‚ ŃĐŸĐŽĐ”Ń€Đ¶ĐžĐŒĐŸĐ” ŃŃ‚Đ°Ń€ĐŸĐłĐŸ фаĐčла. Đ­Ń‚ĐŸ ĐłĐ°Ń€Đ°ĐœŃ‚ĐžŃ€ŃƒĐ”Ń‚, Ń‡Ń‚ĐŸ ссылĐșĐž, псДĐČĐŸĐŽĐœĐžĐŒŃ‹, праĐČа фаĐčла Đž Ń€Đ°ŃŃˆĐžŃ€Đ”ĐœĐœŃ‹Đ” Đ°Ń‚Ń€ĐžĐ±ŃƒŃ‚Ń‹ фаĐčла ĐŸŃŃ‚Đ°ĐœŃƒŃ‚ŃŃ ĐżŃ€Đ”Đ¶ĐœĐžĐŒĐž.

    +

    ĐĐ”ĐŒĐœĐŸĐłĐŸ быстрДД ĐœĐ” ŃĐŸŃ…Ń€Đ°ĐœŃŃ‚ŃŒ Ń€Đ°Đ·Ń€Đ”ŃˆĐ”ĐœĐžŃ.

    +
    +
    ĐŁĐŽĐ°Đ»ĐžŃ‚ŃŒ ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ‹Đ” PNG (ĐłĐ°ĐŒĐŒŃƒ, цĐČĐ”Ń‚ĐŸĐČыД ĐżŃ€ĐŸŃ„ĐžĐ»Đž, Đž Юр.)
    +
    +

    В Ń€Đ°Đ·ĐœŃ‹Ń… Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Đ°Ń… фаĐčлы PNG ĐŒĐŸĐłŃƒŃ‚ ĐžĐŒĐ”Ń‚ŃŒ Ń€Đ°Đ·Đ»ĐžŃ‡ĐœŃƒŃŽ ярĐșĐŸŃŃ‚ŃŒ Đž ĐœĐ°ŃŃ‹Ń‰Đ”ĐœĐœĐŸŃŃ‚ŃŒ, ĐżĐŸŃĐșĐŸĐ»ŃŒĐșу ĐœĐ” ĐČсД Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Ń‹ ĐŸĐŽĐžĐœĐ°ĐșĐŸĐČĐŸ ĐżĐŸĐŽĐŽĐ”Ń€Đ¶ĐžĐČают ĐłĐ°ĐŒĐŒĐ°-ĐșĐŸŃ€Ń€Đ”Đșцою Đž цĐČĐ”Ń‚ĐŸĐČыД ĐżŃ€ĐŸŃ„ĐžĐ»Đž. ĐŁĐŽĐ°Đ»Đ”ĐœĐžĐ” ŃŃ‚ĐŸĐč ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžĐž ЎДлаДт цĐČДта PNG Đ±ĐŸĐ»Đ”Đ” ŃĐŸĐČĐŒĐ”ŃŃ‚ĐžĐŒŃ‹ĐŒĐž ĐŒĐ”Đ¶ĐŽŃƒ Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Đ°ĐŒĐž Đž ŃƒĐŒĐ”ĐœŃŒŃˆĐ°Đ”Ń‚ Ń€Đ°Đ·ĐŒĐ”Ń€ фаĐčла.

    +

    ĐŸŃ€ĐŸŃ‡Đ°Ń ĐœĐ”ĐČĐžĐŽĐžĐŒĐ°Ń ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ ŃƒĐŽĐ°Đ»Đ”ĐœĐ° таĐș жД, ĐșаĐș DPI Đž ĐșĐŸĐŒĐŒĐ”ĐœŃ‚Đ°Ń€ĐžĐž.

    +
    +
    ĐŁĐŽĐ°Đ»ĐžŃ‚ŃŒ ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ‹Đ” JPEG (EXIF, ĐżŃ€ĐŸŃ„ĐžĐ»Đž цĐČДта, GPS, Đž Юр.)
    +
    +

    ĐŁĐŽĐ°Đ»ŃĐ”Ń‚ ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ‹Đ” ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ, таĐșОД ĐșаĐș цĐČĐ”Ń‚ĐŸĐČĐŸĐč ĐżŃ€ĐŸŃ„ĐžĐ»ŃŒ, эĐșŃĐżĐŸĐ·ĐžŃ†ĐžŃŽ, ĐșĐŸĐŸŃ€ĐŽĐžĐœĐ°Ń‚Ń‹ GPS, ĐŒĐŸĐŽĐ”Đ»ŃŒ ĐșĐ°ĐŒĐ”Ń€Ń‹ Đž ĐœĐ°Đ·ĐČĐ°ĐœĐžŃ ПО ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČĐ°ĐœĐœĐŸĐłĐŸ ĐŽĐ»Ń ŃĐŸĐ·ĐŽĐ°ĐœĐžŃ фаĐčла.

    +

    Đ’ŃŃ‚Ń€ĐŸĐ”ĐœĐœĐ°Ń ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃ ĐŸ праĐČĐŸĐŸĐ±Đ»Đ°ĐŽĐ°Ń‚Đ”Đ»Đ” ŃƒĐŽĐ°Đ»Đ”ĐœĐ° таĐșжД. ĐŸĐŸĐ¶Đ°Đ»ŃƒĐčста Đ·Đ°ĐŒĐ”Ń‚ŃŒŃ‚Đ”, Ń‡Ń‚ĐŸ ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ ĐŸĐ±Ń‹Ń‡ĐœĐŸ Đ·Đ°Ń‰ĐžŃ‰Đ”ĐœŃ‹ заĐșĐŸĐœĐŸĐŒ ĐŸĐ± аĐČŃ‚ĐŸŃ€ŃĐșох праĐČах ĐČĐœĐ” заĐČĐžŃĐžĐŒĐŸŃŃ‚Đž ĐŸŃ‚ Ń‚ĐŸĐłĐŸ, ŃĐŸĐŽĐ”Ń€Đ¶Đ°Ń‚ лО ĐŸĐœĐž таĐșОД ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ‹Đ” ОлО ĐœĐ”Ń‚.

    +
    +
    +

    УтОлОты

    +

    Zopfli Đž PNGOUT ĐŸŃ‡Đ”ĐœŃŒ Ń…ĐŸŃ€ĐŸŃˆĐžĐ” ŃĐ¶ĐžĐŒĐ°Ń‚Đ”Đ»Đž PNG, ĐœĐŸ ĐŸŃ‡Đ”ĐœŃŒ ĐŒĐ”ĐŽĐ»Đ”ĐœĐœŃ‹Đ”. ВыĐșлючОтД ох, ДслО ĐČĐ°ĐŒ ĐœŃƒĐ¶ĐœĐŸ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČать PNG Đ±Ń‹ŃŃ‚Ń€ĐŸ (ĐŸŃŃ‚Đ°ĐČŃŒŃ‚Đ” Ń‚ĐŸĐ»ŃŒĐșĐŸ AdvPNG ĐŽĐ»Ń Đ±Ń‹ŃŃ‚Ń€ĐŸĐłĐŸ, ĐœĐŸ ĐČсё жД Ń…ĐŸŃ€ĐŸŃˆĐ”ĐłĐŸ ŃĐ¶Đ°Ń‚ĐžŃ).

    +

    Zopfli Đž OptiPNG ĐŸŃ‡ĐžŃŃ‚ŃŃ‚ RGB Đ·ĐœĐ°Ń‡Đ”ĐœĐžŃ ĐżŃ€ĐŸĐ·Ń€Đ°Ń‡ĐœŃ‹Ń… пОĐșсДлДĐč (ОзĐČĐ”ŃŃ‚ĐœŃ‹Ń… ĐșаĐș "ĐłŃ€ŃĐ·ĐœŃ‹Đč Đ°Đ»ŃŒŃ„Đ°-ĐșĐ°ĐœĐ°Đ»"). ОтĐșлючОтД ĐŸĐ±Đ° ĐžĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Đ° про сжатОО ŃĐżĐ”Ń†ĐžĐ°Đ»ŃŒĐœŃ‹Ń… фаĐčĐ»ĐŸĐČ, ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒŃŽŃ‰ĐžŃ… Đ°Đ»ŃŒŃ„Đ°-ĐșĐ°ĐœĐ°Đ» ĐœĐ” Ń‚ĐŸĐ»ŃŒĐșĐŸ ĐŽĐ»Ń ĐżŃ€ĐŸĐ·Ń€Đ°Ń‡ĐœĐŸŃŃ‚Đž (ĐœĐ°ĐżŃ€ĐžĐŒĐ”Ń€, Đșарты ĐČŃ‹ŃĐŸŃ‚ ĐČ ĐșĐŸĐŒĐżŃŒŃŽŃ‚Đ”Ń€ĐœŃ‹Ń… ограх).

    +
    +

    JPEGOptim

    +
    +
    МаĐșŃĐžĐŒĐ°Đ»ŃŒĐœĐŸĐ” ĐșачДстĐČĐŸ
    +
    +

    ЕслО ŃƒŃŃ‚Đ°ĐœĐŸĐČоть ĐČ 100%, ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžŃ Đ±ŃƒĐŽĐ”Ń‚ бДз ĐżĐŸŃ‚Đ”Ń€Đž ĐșачДстĐČа.

    +

    Đ›ŃŽĐ±ĐŸĐ” Đ·ĐœĐ°Ń‡Đ”ĐœĐžĐ” ĐŒĐ”ĐœŃŒŃˆĐ” 100% проĐČДЎДт Đș ĐżĐŸĐœĐžĐ¶Đ”ĐœĐžŃŽ ĐșачДстĐČа фаĐčĐ»ĐŸĐČ, ДслО Ń€Đ°ĐœĐ”Đ” ĐŸĐœĐž былО ŃĐŸŃ…Ń€Đ°ĐœĐ”ĐœŃ‹ с Đ±ĐŸĐ»Đ”Đ” ĐČŃ‹ŃĐŸĐșĐžĐŒĐž ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐ°ĐŒĐž ĐșачДстĐČа.

    +
    +
    -
    -optipng -

    OptiPNG

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize PNG files using OptiPNG tool.

    - -
    -
    Optimization level
    -

    Number of different setting combinations tested. It rarely makes sense to try them all.

    - -
    Make images interlaced (progressive)
    -

    Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient.

    -

    This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files.

    -
    +
    +

    PNGOUT

    +
    +
    йОп ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž
    +
    +

    PNGOUT ĐŸŃ‡Đ”ĐœŃŒ ŃŃ„Ń„Đ”ĐșтоĐČĐœŃ‹Đč, ĐœĐŸ ĐŸŃ‡Đ”ĐœŃŒ ĐŒĐ”ĐŽĐ»Đ”ĐœĐœŃ‹Đč. Đ˜ŃĐżĐŸĐ»ŃŒĐ·ŃƒĐčтД Đ±ĐŸĐ»Đ”Đ” ĐœĐžĐ·ĐșĐžĐč ŃƒŃ€ĐŸĐČĐ”ĐœŃŒ, ДслО ĐČы ĐœĐ”Ń‚Đ”Ń€ĐżĐ”Đ»ĐžĐČыĐč.

    +
    +
    ĐŸŃ€Đ”Ń€ĐČать, ДслО Đ·Đ°ĐœĐžĐŒĐ°Đ”Ń‚ ĐŒĐœĐŸĐłĐŸ ĐČŃ€Đ”ĐŒĐ”ĐœĐž
    +
    +

    PNGOUT ĐŒĐŸĐ¶Đ”Ń‚ ĐżĐŸŃ‚Ń€Đ”Đ±ĐŸĐČаться ĐŒĐœĐŸĐłĐŸ ĐČŃ€Đ”ĐŒĐ”ĐœĐž ĐœĐ° ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžŃŽ Đ±ĐŸĐ»ŃŒŃˆĐžŃ… фаĐčĐ»ĐŸĐČ. Эта ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșа аĐșĐșŃƒŃ€Đ°Ń‚ĐœĐŸ прДрыĐČаДт ĐČŃ‹ĐżĐŸĐ»ĐœĐ”ĐœĐžĐ” PNGOUT ĐżĐŸŃĐ»Đ” 1 ĐŒĐžĐœŃƒŃ‚Ń‹.

    +
    +
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan is a script based on jpegtran. It uses creates JPEG files with unusual number of progressive scans to achieve better compression, but such files may not be compatible with all browsers.

    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Enabled
    -

    If checked, ImageOptim will try to optimize GIF files using Gifsicle. - -

    GIF files will be changed to interlaced or non-interlaced automatically, whichever is smaller. In-file comments will be removed.

    -

    Please note that Gifsicle works best with animated GIFs and non-animated GIFs rarely can be optimized

    - -

    For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically).

    +
    +

    OxiPNG

    +
    +
    ĐŁŃ€ĐŸĐČĐ”ĐœŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž
    +
    +

    ĐœĐœĐŸĐłĐŸ Ń€Đ°Đ·Đ»ĐžŃ‡ĐœŃ‹Ń… ĐșĐŸĐŒĐ±ĐžĐœĐ°Ń†ĐžĐč ĐœĐ°ŃŃ‚Ń€ĐŸĐ”Đș Đ±Ń‹Đ»ĐŸ ĐżŃ€ĐŸĐČĐ”Ń€Đ”ĐœĐŸ. РДЎĐșĐŸ ĐžĐŒĐ”Đ”Ń‚ ŃĐŒŃ‹ŃĐ» ĐČĐșĐ»ŃŽŃ‡Đ°Ń‚ŃŒ ох ĐČсД.

    +
    +
    ĐĄĐŽĐ”Đ»Đ°Ń‚ŃŒ ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ Ń‡Đ”Ń€Đ”Đ·ŃŃ‚Ń€ĐŸŃ‡ĐœŃ‹ĐŒĐž (ĐżŃ€ĐŸĐłŃ€Đ”ŃŃĐžĐČĐœŃ‹ĐŒĐž)
    +
    +

    Đ§Đ”Ń€Đ”Đ·ŃŃ‚Ń€ĐŸŃ‡ĐœŃ‹Đ” ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ ĐČŃ‹ĐłĐ»ŃĐŽŃŃ‚ Đ»ŃƒŃ‡ŃˆĐ”, ĐșĐŸĐłĐŽĐ° ĐŸĐœĐž Đ·Đ°ĐłŃ€ŃƒĐ·ĐžĐ»ĐžŃŃŒ Ń‡Đ°ŃŃ‚ĐžŃ‡ĐœĐŸ, ĐœĐŸ Ń‡Đ”Ń€Đ”Đ·ŃŃ‚Ń€ĐŸŃ‡ĐœĐŸŃŃ‚ŃŒ ĐŸĐ±Ń‹Ń‡ĐœĐŸ ЎДлаДт сжатОД ĐŒĐ”ĐœĐ”Đ” ŃŃ„Ń„Đ”ĐșтоĐČĐœŃ‹ĐŒ.

    +

    Đ­Ń‚ĐŸŃ‚ флаг ĐžĐŒĐ”Đ”Ń‚ тро ŃĐŸŃŃ‚ĐŸŃĐœĐžŃ: ŃƒŃŃ‚Đ°ĐœĐŸĐČĐ»Đ”ĐœĐœŃ‹Đč, ĐČĐșлючОт Ń‡Đ”Ń€Đ”Đ·ŃŃ‚Ń€ĐŸŃ‡ĐœŃ‹Đ” ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ. ĐŸŃ€ĐŸĐŒĐ”Đ¶ŃƒŃ‚ĐŸŃ‡ĐœŃ‹Đč, ĐœĐ” ĐžĐ·ĐŒĐ”ĐœĐžŃ‚ ŃĐŸŃŃ‚ĐŸŃĐœĐžĐ” Ń‡Đ”Ń€Đ”Đ·ŃŃ‚Ń€ĐŸŃ‡ĐœĐŸŃŃ‚Đž фаĐčла, а ŃĐœŃŃ‚Ń‹Đč флаг ŃƒĐŽĐ°Đ»ĐžŃ‚ Ń‡Đ”Ń€Đ”Đ·ŃŃ‚Ń€ĐŸŃ‡ĐœĐŸŃŃ‚ŃŒ Оз фаĐčĐ»ĐŸĐČ.

    +
    +
    +
    +

    Gifsicle

    +

    Đ”Đ»Ń Đ»ŃƒŃ‡ŃˆĐ”ĐłĐŸ ŃĐ¶Đ°Ń‚ĐžŃ, Вы ĐŽĐŸĐ»Đ¶ĐœŃ‹ ĐżŃ€Đ”ĐŸĐ±Ń€Đ°Đ·ĐŸĐČать фаĐčлы GIF ĐČ PNG (ImageOptim ĐœĐ” ЎДлаДт ŃŃ‚ĐŸ аĐČŃ‚ĐŸĐŒĐ°Ń‚ĐžŃ‡Đ”ŃĐșĐž).

    +
    + + diff --git a/imageoptim/ru.lproj/ImageOptim.strings b/imageoptim/ru.lproj/ImageOptim.strings new file mode 100644 index 00000000..a51ed1cb --- /dev/null +++ b/imageoptim/ru.lproj/ImageOptim.strings @@ -0,0 +1,219 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "ВсД ĐŸĐșĐœĐ° - ĐœĐ° ĐżĐ”Ń€Đ”ĐŽĐœĐžĐč ĐżĐ»Đ°Đœ"; + +/* Menu Item "Window" */ +"19.title" = "ОĐșĐœĐŸ"; + +/* Menu Item "Minimize" */ +"23.title" = "ĐĄĐČĐ”Ń€ĐœŃƒŃ‚ŃŒ"; + +/* Top-level Main Menu "Window" */ +"24.title" = "ОĐșĐœĐŸ"; + +/* Top-level Main Menu "Services" */ +"130.title" = "ĐĄĐ»ŃƒĐ¶Đ±Ń‹"; + +/* Menu Item "Services" */ +"131.title" = "ĐĄĐ»ŃƒĐ¶Đ±Ń‹"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ĐĄĐșрыть ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ЗаĐČĐ”Ń€ŃˆĐžŃ‚ŃŒ ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "ĐĄĐșрыть ĐŽŃ€ŃƒĐłĐžĐ”"; + +/* Menu Item "Show All" */ +"150.title" = "ĐŸĐŸĐșĐ°Đ·Đ°Ń‚ŃŒ ĐČсД"; + +/* Menu Item "Zoom" */ +"197.title" = "Đ˜Đ·ĐŒĐ”ĐœĐžŃ‚ŃŒ ĐŒĐ°ŃŃˆŃ‚Đ°Đ±"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "ĐĄĐżĐžŃĐŸĐș фаĐčĐ»ĐŸĐČ ĐŽĐ»Ń ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "ЀаĐčĐ»"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Đ Đ°Đ·ĐŒĐ”Ń€"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Đ Đ°Đ·ĐŒĐ”Ń€ фаĐčла ĐżĐŸŃĐ»Đ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Đ Đ°Đ·ĐŒĐ”Ń€ фаĐčла ĐżĐŸŃĐ»Đ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Đ­ĐșĐŸĐœĐŸĐŒĐžŃ"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Статус"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "О ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐ” ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșо
"; + +/* Menu Item "Edit" */ +"375.title" = "ПраĐČĐșа"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "ПраĐČĐșа"; + +/* Menu Item "Select All" */ +"377.title" = "Đ’Ń‹Đ±Ń€Đ°Ń‚ŃŒ ĐČсД"; + +/* Menu Item "Undo" */ +"378.title" = "ĐžŃ‚ĐŒĐ”ĐœĐžŃ‚ŃŒ"; + +/* Menu Item "Redo" */ +"384.title" = "ĐŸĐŸĐČŃ‚ĐŸŃ€"; + +/* Menu Item "Cut" */ +"398.title" = "Đ’Ń‹Ń€Đ”Đ·Đ°Ń‚ŃŒ"; + +/* Menu Item "Copy" */ +"399.title" = "ĐšĐŸĐżĐžŃ€ĐŸĐČать"; + +/* Menu Item "Paste" */ +"400.title" = "ВстаĐČоть"; + +/* Menu Item "Delete" */ +"402.title" = "ĐŁĐŽĐ°Đ»ĐžŃ‚ŃŒ"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Đ”ĐŸĐ±Đ°ĐČоть ĐœĐŸĐČыД фаĐčлы ОлО папĐșĐž"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Đ”ĐŸĐ±Đ°ĐČоть"; + +/* Menu Item "File" */ +"429.title" = "ЀаĐčĐ»"; + +/* Top-level Main Menu "File" */ +"430.title" = "ЀаĐčĐ»"; + +/* Menu Item "Add Files
" */ +"437.title" = "Đ”ĐŸĐ±Đ°ĐČоть фаĐčлы "; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "ĐĄĐŸŃŃ‚ĐŸŃĐœĐžĐ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "ĐĄĐŸŃŃ‚ĐŸŃĐœĐžĐ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "ЗаĐșрыть ĐŸĐșĐœĐŸ"; + +/* Top-level Main Menu "Help" */ +"505.title" = "СпраĐČĐșа"; + +/* Menu Item "Help" */ +"504.title" = "СпраĐČĐșа"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "СпраĐČĐșа ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "О ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐ” ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "ĐžĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČать ДщД раз"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "ĐŸŃ€ĐŸĐČĐ”Ń€ĐžŃ‚ŃŒ ĐœĐ° ĐœĐ°Đ»ĐžŃ‡ĐžĐ” ĐŸĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžĐč
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "ĐŸĐ”Ń€Đ”Ń‚ŃĐœĐžŃ‚Đ” фаĐčлы ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžĐč ĐČ ĐŸĐ±Đ»Đ°ŃŃ‚ŃŒ ĐČŃ‹ŃˆĐ”"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Запустоть ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž ДщД раз"; + +/* Button "Again" */ +"635.title" = "ĐŸĐŸĐČŃ‚ĐŸŃ€ĐžŃ‚ŃŒ"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Статус"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "ĐČĐ”Ń€ŃĐžŃ"; + +/* TextFieldCell "version" */ +"646.title" = "ĐČĐ”Ń€ŃĐžŃ"; + +/* Menu Item "Tools" */ +"655.title" = "Đ˜ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Ń‹"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Đ˜ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Ń‹"; + +/* Menu Item "Quick Look" */ +"708.title" = "БыстрыĐč ĐżŃ€ĐŸŃĐŒĐŸŃ‚Ń€"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "ĐŸĐ”Ń€Đ”Ń‚ŃĐœĐžŃ‚Đ” ĐșĐ°Ń€Ń‚ĐžĐœĐșĐž сюЮа"; + +/* Menu Item "Delete Completed" */ +"721.title" = "ĐŁĐŽĐ°Đ»Đ”ĐœĐžĐ” заĐČĐ”Ń€ŃˆĐ”ĐœĐŸ"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "ĐžĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČать ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœŃ‹Đ”"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ВДб-ŃŃ‚Ń€Đ°ĐœĐžŃ†Đ° ImageOptim"; + +/* Menu Item "View Source" */ +"735.title" = "ĐŸĐŸĐșĐ°Đ·Đ°Ń‚ŃŒ ĐžŃŃ…ĐŸĐŽĐœŃ‹Đč ĐșĐŸĐŽ"; + +/* Menu Item "Optimized Size" */ +"740.title" = "ĐžĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœŃ‹Đč Ń€Đ°Đ·ĐŒĐ”Ń€"; + +/* Menu Item "Savings" */ +"741.title" = "Đ­ĐșĐŸĐœĐŸĐŒĐžŃ"; + +/* Menu Item "Best tool" */ +"747.title" = "ЛучшоĐč ĐžĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "ЛучшоĐč ĐžĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚"; + +/* Menu Item "Original Size" */ +"791.title" = "Đ Đ°Đ·ĐŒĐ”Ń€ ĐŸŃ€ĐžĐłĐžĐœĐ°Đ»Đ°"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "ĐžŃ€ĐžĐłĐžĐœĐ°Đ»"; + +/* Menu Item "Show Columns" */ +"809.title" = "ĐŸĐŸĐșĐ°Đ·Đ°Ń‚ŃŒ ŃŃ‚ĐŸĐ»Đ±Ń†Ń‹"; + +/* Menu Item "Donate" */ +"820.title" = "ĐŸĐŸĐ¶Đ”Ń€Ń‚ĐČĐŸĐČать"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "Đ’Đ”Ń€ĐœŃƒŃ‚ŃŒ Đș ĐŸŃ€ĐžĐłĐžĐœĐ°Đ»Ńƒ"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "КачДстĐČĐŸ: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "ĐžŃŃ‚Đ°ĐœĐŸĐČоть"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "ĐšĐŸĐżĐžŃ€ĐŸĐČать ĐșаĐș Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "ĐŸĐŸĐșĐ°Đ·Đ°Ń‚ŃŒ ĐČ Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "ĐœĐžĐœĐžĐŒĐžĐ·Đ°Ń†ĐžŃ с ĐżĐŸŃ‚Đ”Ń€ŃĐŒĐž"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "ĐŸĐŸĐșĐ°Đ·Đ°Ń‚ŃŒ ĐČ Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Статус"; + diff --git a/imageoptim/ru.lproj/Localizable.strings b/imageoptim/ru.lproj/Localizable.strings old mode 100755 new mode 100644 index 8bcb9f16..2a768257 --- a/imageoptim/ru.lproj/Localizable.strings +++ b/imageoptim/ru.lproj/Localizable.strings @@ -1,14 +1,55 @@ -"All neccessary tools have been disabled in Preferences" = "ВсД ĐœĐ”ĐŸĐ±Ń…ĐŸĐŽĐžĐŒŃ‹Đ” ŃƒŃ‚ĐžĐ»ĐžŃ‚Ń‹ былО ĐŸŃ‚ĐșĐ»ŃŽŃ‡Đ”ĐœŃ‹ ĐČ ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșах"; -"Can't map file into memory" = "ĐĐ” ĐŒĐŸĐłŃƒ Đ·Đ°ĐłŃ€ŃƒĐ·ĐžŃ‚ŃŒ фаĐčĐ» ĐČ ĐżĐ°ĐŒŃŃ‚ŃŒ"; -"File cannot be optimized any further" = "ЀаĐčĐ» ĐœĐ” ĐŒĐŸĐ¶Đ”Ń‚ Đ±Ń‹Ń‚ŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐ°"; -"File is neither PNG, GIF nor JPEG" = "ЀаĐčĐ» ĐœĐ” яĐČĐ»ŃĐ”Ń‚ŃŃ PNG ОлО JPEG"; -"Inspecting file" = "ĐŸŃ€ĐŸĐČДрĐșа фаĐčĐ»ĐŸĐČ"; +/* tooltip */ +"%@ failed to start" = "%@ ŃĐ±ĐŸĐč про запусĐșĐ”"; + +/* undo command name */ +"Add" = "Đ”ĐŸĐ±Đ°ĐČоть"; + +/* undo command name */ +"Cut" = "Đ’Ń‹Ń€Đ”Đ·Đ°Ń‚ŃŒ"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "ВсД ĐœĐ”ĐŸĐ±Ń…ĐŸĐŽĐžĐŒŃ‹Đ” ĐžĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Ń‹ былО ĐŸŃ‚ĐșĐ»ŃŽŃ‡Đ”ĐœŃ‹ ĐČ ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșах"; + +/* tooltip, generic loading error */ +"Can't open the file" = "ĐĐ” ĐŒĐŸĐłŃƒ ĐŸŃ‚Đșрыть фаĐčĐ»"; + +/* tooltip */ +"File cannot be optimized any further" = "ЀаĐčĐ» ĐœĐ” ĐŒĐŸĐ¶Đ”Ń‚ Đ±Ń‹Ń‚ŃŒ Đ±ĐŸĐ»Đ”Đ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°Đœ"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "ЀаĐčĐ» ĐœĐ” яĐČĐ»ŃĐ”Ń‚ŃŃ PNG, GIF ОлО JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim заĐșŃ€ĐŸĐ”Ń‚ŃŃ ĐșĐŸĐłĐŽĐ° ĐČсД ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž Đ±ŃƒĐŽŃƒŃ‚ заĐČĐ”Ń€ŃˆĐ”ĐœŃ‹"; + +/* tooltip */ +"Inspecting file" = "ĐŸŃ€ĐŸĐČДрĐșа фаĐčла"; + +/* newly added to the queue */ "New file" = "ĐĐŸĐČыĐč фаĐčĐ»"; + +/* status bar */ +"Lossy minification enabled" = "ВĐșĐ»ŃŽŃ‡Đ”ĐœĐ° ĐŒĐžĐœĐžĐŒĐžĐ·Đ°Ń†ĐžŃ с ĐżĐŸŃ‚Đ”Ń€ŃĐŒĐž "; + +/* tooltip */ "Optimized file could not be saved" = "ĐžĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœŃ‹Đč фаĐčĐ» ĐœĐ” ĐŒĐŸĐ¶Đ”Ń‚ Đ±Ń‹Ń‚ŃŒ ŃĐŸŃ…Ń€Đ°ĐœĐ”Đœ"; -"Optimized successfully with %@" = "ĐžĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœĐ°Ń ŃƒŃĐżĐ”ŃˆĐœĐŸ с (%@)"; -"Size of optimized file is 0" = "Đ Đ°Đ·ĐŒĐ”Ń€ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐœĐŸĐłĐŸ фаĐčла 0"; + +/* tooltip */ +"Optimized successfully with %@" = "ĐŁŃĐżĐ”ŃˆĐœĐŸ ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČĐ°ĐœĐŸ, ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒŃ %@"; + +/* tooltip */ +"Reverted to original" = "Đ’ĐŸĐ·ĐČŃ€Đ°Ń‰Đ”ĐœĐŸ Đș ĐŸŃ€ĐžĐłĐžĐœĐ°Đ»Ńƒ"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "СэĐșĐŸĐœĐŸĐŒĐ»Đ”ĐœĐŸ %1$@ Оз %2$@. %3$@ ĐČŃĐ”ĐłĐŸ (ĐŽĐŸ %4$@ ĐœĐ° фаĐčĐ»)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "СэĐșĐŸĐœĐŸĐŒĐ»Đ”ĐœĐŸ %1$@ Оз %2$@. %3$@ ĐČ ŃŃ€Đ”ĐŽĐœĐ”ĐŒ ĐœĐ° фаĐčĐ» (ĐŽĐŸ %4$@)"; + +/* command name, tooltip */ "Started %@" = "ĐĐ°Ń‡Đ°Ń‚ĐŸ %@"; -"Waiting in queue" = "ĐžĐ¶ĐžĐŽĐ°ĐœĐžĐ” ĐČ ĐŸŃ‡Đ”Ń€Đ”ĐŽĐž"; -"Waiting to be optimized" = "ĐžĐ¶ĐžĐŽĐ°ĐœĐžĐ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ†Đž"; -"Waiting to start more optimizations" = "В ĐŸĐ¶ĐžĐŽĐ°ĐœĐžĐž ĐœĐ°Ń‡Đ°Đ»Đ° ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; -"%@ failed to start" = "%@ ŃĐ±ĐŸĐč про запусĐșĐ”"; \ No newline at end of file + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "ĐžĐ¶ĐžĐŽĐ°ĐœĐžĐ” ĐœĐ°Ń‡Đ°Đ»Đ° ĐŽĐ°Đ»ŃŒĐœĐ”Đčшох ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐč"; + diff --git a/imageoptim/ru.lproj/MainMenu.xib b/imageoptim/ru.lproj/MainMenu.xib deleted file mode 100644 index 007f52a6..00000000 --- a/imageoptim/ru.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - ĐĄĐŸŃŃ‚ĐŸŃĐœĐžĐ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - ЀаĐčĐ» - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Ń€Đ°Đ·ĐŒĐ”Ń€ (original) - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Ń€Đ°Đ·ĐŒĐ”Ń€ - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Đ­ĐșĐŸĐœĐŸĐŒĐžŃ - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - Đ˜ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Ń‹ - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - ĐŸĐ”Ń€Đ”Ń‚ŃĐœĐžŃ‚Đ” фаĐčлы ĐČ Ń‚Đ°Đ±Đ»ĐžŃ†Ńƒ ĐČŃ‹ŃˆĐ” - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - Đ”ĐŸĐ±Đ°ĐČоть - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{426, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{450, 6}, {79, 25}} - - YES - - 67239424 - 134217728 - ĐŸĐŸĐČŃ‚ĐŸŃ€ - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Запустоть ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžŃŽ ДщД раз - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - MainMenu - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - О ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐ” ImageOptim - - 2147483647 - - - - - - ĐžĐ±ĐœĐŸĐČĐ»Đ”ĐœĐžŃâ€Š - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșа
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ĐĄĐ»ŃƒĐ¶Đ±Ń‹ - - 1048576 - 2147483647 - - - submenuAction: - - ĐĄĐ»ŃƒĐ¶Đ±Ń‹ - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ĐĄĐșрыть ImageOptim - h - 1048576 - 2147483647 - - - - - - ĐĄĐșрыть ĐŽŃ€ŃƒĐłĐžĐ” - h - 1572864 - 2147483647 - - - - - - ĐŸĐŸĐșĐ°Đ·Đ°Ń‚ŃŒ ĐČсД - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ЗаĐČĐ”Ń€ŃˆĐžŃ‚ŃŒ ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - ЀаĐčĐ» - - 1048576 - 2147483647 - - - submenuAction: - - ЀаĐčĐ» - - - - Đ”ĐŸĐ±Đ°ĐČоть фаĐčлы  - o - 1048576 - 2147483647 - - - - - - ĐžĐżŃ‚ĐžĐŒĐžĐ·ĐžŃ€ĐŸĐČать ДщД раз - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimize Optimized - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ЗаĐČĐ”Ń€ŃˆĐžŃ‚ŃŒ ImageOptim - w - 1048576 - 2147483647 - - - - - - - - - ПраĐČĐșа - - 1048576 - 2147483647 - - - submenuAction: - - ПраĐČĐșа - - - - ĐžŃ‚ĐŒĐ”ĐœĐžŃ‚ŃŒ - z - 1048576 - 2147483647 - - - - - - ĐŸĐŸĐČŃ‚ĐŸŃ€ - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Đ’Ń‹Ń€Đ”Đ·Đ°Ń‚ŃŒ - x - 1048576 - 2147483647 - - - - - - ĐšĐŸĐżĐžŃ€ĐŸĐČать - c - 1048576 - 2147483647 - - - - - - ВстаĐČоть - v - 1048576 - 2147483647 - - - - - - ĐŁĐŽĐ°Đ»ĐžŃ‚ŃŒ - CA - 1048576 - 2147483647 - - - - - - YES - YES - Delete Completed - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Đ’Ń‹Đ±Ń€Đ°Ń‚ŃŒ ĐČсД - a - 1048576 - 2147483647 - - - - - - - - - Đ˜ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Ń‹ - - 2147483647 - - - submenuAction: - - Đ˜ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Ń‹ - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - ОĐșĐœĐŸ - - 1048576 - 2147483647 - - - submenuAction: - - ОĐșĐœĐŸ - - - - ĐŁĐ±Ń€Đ°Ń‚ŃŒ ĐČ Dock - m - 1048576 - 2147483647 - - - - - - Đ˜Đ·ĐŒĐ”ĐœĐžŃ‚ŃŒ ĐŒĐ°ŃŃˆŃ‚Đ°Đ± - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - ВсД ĐŸĐșĐœĐ°- ĐœĐ° ĐżĐ”Ń€Đ”ĐŽĐœĐžĐč ĐżĐ»Đ°Đœ - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Show Columns - - 2147483647 - - - submenuAction: - - - - - - Ń€Đ°Đ·ĐŒĐ”Ń€ (original) - - 2147483647 - - - - - - Ń€Đ°Đ·ĐŒĐ”Ń€ - - 2147483647 - 1 - - - - - - Đ­ĐșĐŸĐœĐŸĐŒĐžŃ - - 2147483647 - 1 - - - - - - Đ˜ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Ń‹ - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - СпраĐČĐșа - - 1048576 - 2147483647 - - - submenuAction: - - СпраĐČĐșа - - - - СпраĐČĐșа ImageOptim - - 1048576 - 2147483647 - - - - - - ImageOptim Website - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - View Source - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - О ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŒĐ” ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 100665349 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - ĐČĐ”Ń€ŃĐžŃ - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Ń€Đ°Đ·ĐŒĐ”Ń€ - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - ĐĄĐżĐžŃĐŸĐș фаĐčĐ»ĐŸĐČ - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Đ Đ°Đ·ĐŒĐ”Ń€ фаĐčла ĐżĐŸŃĐ»Đ” ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Đ”ĐŸĐ±Đ°ĐČоть ĐœĐŸĐČыД фаĐčлы ОлО папĐșĐž - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimization status - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - ĐŸĐ”Ń€Đ”Ń‚ŃĐœĐžŃ‚Đ” сюЮа Ń„Đ°ĐžÌ†Đ»Ń‹ - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Size of file after optimization - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/ru.lproj/PrefsController.strings b/imageoptim/ru.lproj/PrefsController.strings new file mode 100644 index 00000000..a8fdb004 --- /dev/null +++ b/imageoptim/ru.lproj/PrefsController.strings @@ -0,0 +1,83 @@ +/* Window title */ +"5.title" = "ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "ĐžŃĐœĐŸĐČĐœŃ‹Đ”"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "ĐĄĐșĐŸŃ€ĐŸŃŃ‚ŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* Tab quality (for lossy minification) */ +"177.label" = "КачДстĐČĐŸ"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Запось фаĐčĐ»ĐŸĐČ ĐœĐ° ЎОсĐș"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "ĐĄĐŸŃ…Ń€Đ°ĐœŃŃ‚ŃŒ ссылĐșĐž, Ń€Đ°Đ·Ń€Đ”ŃˆĐ”ĐœĐžŃ Đž Đ°Ń‚Ń€ĐžĐ±ŃƒŃ‚Ń‹ фаĐčла"; + +/* label in speed tab "Optimization level" */ +"818.title" = "ĐŁŃ€ĐŸĐČĐ”ĐœŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* "Fast" */ +"819.title" = "Đ‘Ń‹ŃŃ‚Ń€ĐŸ"; + +/* "Insane" */ +"820.title" = "Đ‘Đ”Đ·ŃƒĐŒĐœĐŸ"; + +/* "Normal" */ +"821.title" = "ĐĐŸŃ€ĐŒĐ°Đ»ŃŒĐœĐŸ"; + +/* "Extra" */ +"822.title" = "Đ­Đșстра"; + +/* Checkbox in Preferences */ +"854.title" = "ĐŁĐŽĐ°Đ»ĐžŃ‚ŃŒ ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ‹Đ” PNG (ĐłĐ°ĐŒĐŒŃƒ, цĐČĐ”Ń‚ĐŸĐČыД ĐżŃ€ĐŸŃ„ĐžĐ»Đž Đž Юр.)"; + +/* "Optimization type" */ +"856.title" = "йОп ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž"; + +/* Optimization level: "Simple" */ +"857.title" = "ĐŸŃ€ĐŸŃŃ‚ĐŸĐč"; + +/* Optimization level: "Xtreme" */ +"858.title" = "Đ­ĐșŃŃ‚Ń€Đ”ĐŒĐ°Đ»ŃŒĐœŃ‹Đč"; + +/* Optimization level: "Intense" */ +"860.title" = "Đ˜ĐœŃ‚Đ”ĐœŃĐžĐČ"; + +/* Optimization level: "Longest match" */ +"861.title" = "ĐĐ°ĐžĐ±ĐŸĐ»ŃŒŃˆĐ”Đ” ŃĐŸĐČĐżĐ°ĐŽĐ”ĐœĐžĐ”"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "ВДб-Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Ń‹ Ń‚Ń€Đ”Đ±ŃƒŃŽŃ‚ ŃƒĐŽĐ°Đ»Đ”ĐœĐžĐ” Ń‡Đ°ĐœĐșĐŸĐČ ĐłĐ°ĐŒĐŒŃ‹"; + +/* label "JPEG quality" */ +"868.title" = "КачДстĐČĐŸ JPEG"; + +/* Checkbox in Preferences */ +"911.title" = "ĐŁĐŽĐ°Đ»ĐžŃ‚ŃŒ ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ‹Đ” JPEG (EXIF, ĐżŃ€ĐŸŃ„ĐžĐ»Đž цĐČДта, GPS Đž Юр.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "ĐœĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ‹Đ” Đž цĐČĐ”Ń‚ĐŸĐČыД ĐżŃ€ĐŸŃ„ĐžĐ»Đž"; + +/* Header above list of tools to enable */ +"1107.title" = "ВĐșĐ»ŃŽŃ‡ĐžŃ‚ŃŒ"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "ĐĄĐŸŃ…Ń€Đ°ĐœĐ”ĐœĐžĐ” ĐœĐ° сДтДĐČыД ЎОсĐșĐž Đ±ŃƒĐŽĐ”Ń‚ быстрДД, ДслО ĐœĐ” ŃĐŸŃ…Ń€Đ°ĐœŃŃ‚ŃŒ Ń€Đ°Đ·Ń€Đ”ŃˆĐ”ĐœĐžŃ фаĐčĐ»ĐŸĐČ"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "ĐĐ” рДĐșĐŸĐŒĐ”ĐœĐŽŃƒĐ”Ń‚ŃŃ, ДслО ĐČы ĐżĐŸĐ»Đ°ĐłĐ°Đ”Ń‚Đ”ŃŃŒ ĐœĐ° ĐČŃŃ‚Ń€ĐŸĐ”ĐœĐœŃƒŃŽ ĐžĐœŃ„ĐŸŃ€ĐŒĐ°Ń†ĐžŃŽ ĐŸ праĐČĐŸĐŸĐ±Đ»Đ°ĐŽĐ°Ń‚Đ”Đ»Đ”"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "КачДстĐČĐŸ GIF"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "ДДлаДт фаĐčлы ĐłĐŸŃ€Đ°Đ·ĐŽĐŸ ĐŒĐ”ĐœŃŒŃˆĐ”, ĐœĐŸ ĐŒĐŸĐ¶Đ”Ń‚ ĐžĐ·ĐŒĐ”ĐœĐžŃ‚ŃŒ Ń‚ĐŸ, ĐșаĐș ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ ĐČŃ‹ĐłĐ»ŃĐŽŃŃ‚"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "КачДстĐČĐŸ PNG"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "ВĐșĐ»ŃŽŃ‡ĐžŃ‚ŃŒ ĐŒĐžĐœĐžĐŒĐžĐ·Đ°Ń†ĐžŃŽ с ĐżĐŸŃ‚Đ”Ń€ŃĐŒĐž"; diff --git a/imageoptim/ru.lproj/PrefsController.xib b/imageoptim/ru.lproj/PrefsController.xib deleted file mode 100644 index f683f959..00000000 --- a/imageoptim/ru.lproj/PrefsController.xib +++ /dev/null @@ -1,3247 +0,0 @@ - - - - 1060 - 11D50 - 2177 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2177 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ĐĐ°ŃŃ‚Ń€ĐŸĐčĐșĐž ImageOptim - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - ĐĄĐŸŃ…Ń€Đ°ĐœŃŃ‚ŃŒ праĐČа фаĐčĐ»ĐŸĐČ, Đ°Ń‚Ń€ĐžĐ±ŃƒŃ‚Ń‹ Đž ссылĐșĐž - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - РДзДрĐČĐœŃ‹Đ” ĐșĐŸĐżĐžĐž ĐŸŃ€ĐžĐłĐžĐœĐ°Đ»ŃŒĐœŃ‹Ń… фаĐčĐ»ĐŸĐČ - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - ЗапосыĐČать фаĐčлы ĐœĐ° ЎОсĐș - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - ĐŁĐŽĐ°Đ»ŃŃ‚ŃŒ Ń‡Đ°ĐœĐșĐž - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 11}, {385, 17}} - - - YES - - 67239424 - 4194304 - ВДб-Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Ń‹ Ń‚Ń€Đ”Đ±ŃƒŃŽŃ‚ ŃƒĐŽĐ°Đ»Đ”ĐœĐžĐ” ĐłĐ°ĐŒĐŒŃ‹ - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Đ’Ń‹Ń€Đ”Đ·Đ°Ń‚ŃŒ ĐŒĐ”Ń‚ĐșĐž EXIF Đž ĐșĐŸĐŒĐŒĐ”ĐœŃ‚Đ°Ń€ĐžĐž Оз фаĐčла - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - ВĐșĐ»ŃŽŃ‡Đ”Đœ - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - ĐžŃĐœĐŸĐČĐœŃ‹Đ” - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - - YES - - 67239424 - 71303168 - йОп ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - - YES - - 67239424 - 272629760 - ĐŸŃ€ĐŸŃŃ‚ĐŸĐč - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{329, 155}, {81, 22}} - - - - YES - - 67239424 - 71303168 - Đ­ĐșŃŃ‚Ń€Đ”ĐŒĐ°Đ»ŃŒĐœŃ‹Đč - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - - YES - - 67239424 - 138412032 - Đ˜ĐœŃ‚Đ”ĐœŃĐžĐČĐœŃ‹Đč - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - - YES - - 67239424 - 138412032 - Đ”Đ»ĐžŃ‚Đ”Đ»ŃŒĐœĐŸĐ” ŃĐŸĐŸŃ‚ĐČДтстĐČОД - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - - YES - - 67239424 - 0 - ĐŸĐŸĐżŃ‹Ń‚Đ°Ń‚ŃŒŃŃ ĐžŃĐżĐŸĐ»ŃŒĐ·ĐŸĐČать ĐŽĐŸĐżĐŸĐ»ĐœĐžŃ‚Đ”Đ»ŃŒĐœŃ‹Đ” Ń„ĐžĐ»ŃŒŃ‚Ń€Ń‹ - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - - YES - - -2080244224 - 0 - ĐŸŃ€ĐŸĐżŃƒŃĐșать,ДслО ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžŃ Đ·Đ°ĐœĐžĐŒĐ°Đ”Ń‚ ĐŒĐœĐŸĐłĐŸ ĐČŃ€Đ”ĐŒĐ”ĐœĐž - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - ĐĄĐŽĐ”Đ»Đ°Ń‚ŃŒ ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ с Ń‡Đ”Ń€Đ”ŃŃŃ‚Ń€ĐŸŃ‡ĐœĐŸĐč разĐČДртĐșĐŸĐč (ĐżŃ€ĐŸĐłŃ€Đ”ŃŃĐžĐČĐœŃ‹ĐŒ) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - ĐŁŃ€ĐŸĐČĐ”ĐœŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - ĐŸŃ€ĐŸĐłŃ€Đ”ŃŃĐžĐČĐœŃ‹Đ” ĐžĐ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐžŃ ĐŸĐ±Ń‹Ń‡ĐœĐŸ Đ±ĐŸĐ»ŃŒŃˆĐ” - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 ĐżŃ€ĐŸŃ…ĐŸĐŽĐ° - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 ĐżŃ€ĐŸŃ…ĐŸĐŽĐ° - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - ĐŁŃ€ĐŸĐČĐ”ĐœŃŒ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†ĐžĐž - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - БыстрыĐč - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Đ‘Đ”Đ·ŃƒĐŒĐœŃ‹Đč - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - ĐĐŸŃ€ĐŒĐ°Đ»ŃŒĐœŃ‹Đč - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Đ­Đșстра - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - МаĐșŃĐžĐŒĐ°Đ»ŃŒĐœĐŸĐ” ĐșачДстĐČĐŸ - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - - - {{0, 0}, {2560, 1578}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/sk.lproj/Help/index.html b/imageoptim/sk.lproj/Help/index.html new file mode 100644 index 00000000..70d744b9 --- /dev/null +++ b/imageoptim/sk.lproj/Help/index.html @@ -0,0 +1,60 @@ + + + + +Codestin Search App + + + + + + + +

    ImageOptim

    +

    Ako pouĆŸĂ­vaĆ„

    +
      +
    1. Jednoducho Ć„ahajte a pustite PNG alebo JPEG sĂșbory alebo adresĂĄre do hlavnĂ©ho okna ImageOptim.
    2. +
    3. Počkajte na dokončenie.
    4. +
    5. Radujte sa! (z menĆĄĂ­ch sĂșborov)
    6. +
    +

    SĂșbory budĂș prepĂ­sanĂ© menĆĄou verziou. NeoptimalitovanĂ© verzie budĂș presunutĂ© do koĆĄa.

    +

    SĂșbory je moĆŸnĂ© tieĆŸ pretiahnuĆ„ na ikonku ImageOptim v Docku.

    +

    Naučte sa zmeniĆ„ Nastavenia.

    +

    Ikony v tabuÄŸke sĂșborov

    + + + + + + + + + + + + + + + + + + + + + +
    ZelenĂĄ fajkaObraz bol ĂșspeĆĄne optimalizovanĂœ.
    ZelenĂ© XVĆĄetko prebehlo v poriadku, ale obrĂĄzok uĆŸ viac nemohol byĆ„ optimalizovanĂœ.
    Ć edĂĄ hviezdaPrebieha optimalizĂĄcia tohto sĂșboru.
    Ć edĂ© bodkySĂșbor je vo zaradenĂœ na optimalizĂĄciu a čakĂĄ na dokončenie ostatnĂœch sĂșborov.
    OranĆŸovĂœ vĂœkričnĂ­kVyskytla sa chyba počas optimalizĂĄcie. Vysvetlenie nĂĄjdete spustenĂ­m Console.app.
    +

    Ako to funguje

    +

    ImageOptim je rozhranie (GUI) pre tieto aplikĂĄcie:

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • a PNGOUT.
    • +
    +

    ImageOptim ich spustĂ­ a automaticky vyberie najmenĆĄĂ­ sĂșbor.

    + + diff --git a/imageoptim/sk.lproj/Help/prefs.html b/imageoptim/sk.lproj/Help/prefs.html new file mode 100644 index 00000000..08250617 --- /dev/null +++ b/imageoptim/sk.lproj/Help/prefs.html @@ -0,0 +1,78 @@ + + + + +Codestin Search App + + + + + + + +

    Nastavenia ImageOptim

    +

    « SpÀƄ na Ășvod

    +

    Vƥeobecné nastavenia

    +
    +
    ZachovaĆ„ prĂĄva k sĂșborom, vlastnosti a tvrdĂ© odkazy
    +
    +

    Namiesto odstrĂĄnenia pĂŽvodnĂœch sĂșborov, zapĂ­sanie novĂ©ho s rovnakĂœm nĂĄzvom, iba sa nahradĂ­ pĂŽvodnĂœ obsah sĂșboru. To zaistĂ­, ĆŸe vĆĄetky tvrdĂ© odkazy, aliasy, vlastnĂ­ctva sĂșborov, oprĂĄvnenia, rozĆĄĂ­renĂ© atribĂșty sĂșborov zostanĂș rovnakĂ©.

    +

    Je mierne rĂœchlejĆĄie nezachovĂĄvaĆ„ oprĂĄvnenia.

    +
    +
    OdstråniƄ metadåta z PNG (gama, farebné profily, nepovinné kusy)
    +
    +

    PNG sĂșbory mĂŽĆŸu maĆ„ rĂŽzny jas a sĂœtosĆ„ farieb v rĂŽznych prehliadačoch, pretoĆŸe nie vĆĄetky prehliadače podporujĂș funkcie gama korekcie a farebnĂœch profilov rovnako. OdstrĂĄnenie tĂœchto informĂĄciĂ­ robĂ­ farbu PNG viac konzistentnĂș naprieč prehliadačmi a zmenĆĄĂ­ sa veÄŸkosĆ„ sĂșboru.

    +

    OstatnĂ© neviditeÄŸnĂ© informĂĄcie sa odstrĂĄnia rovnako, ako naprĂ­klad DPI a komentĂĄre.

    +
    +
    OdstrĂĄniĆ„ metadĂĄta z JPEG (EXIF, farebnĂ© profily, GPS, rotĂĄcia, atď.)
    +
    +

    Odstraƈuje metadĂĄta z obrĂĄzkov, ako naprĂ­klad profil farieb, doba expozĂ­cie, GPS sĂșradnice, model fotoaparĂĄtu a nĂĄzov softvĂ©ru pouĆŸitĂ©ho na vytvorenie danĂ©ho sĂșboru.

    +

    Rovnako sa odstrĂĄnia vloĆŸenĂ© informĂĄcie o autorskĂœch prĂĄvach. Upozorƈujeme, ĆŸe vo vĆĄeobecnosti sĂș obrĂĄzky chrĂĄnenĂ© autorskĂœm prĂĄvom bez ohÄŸadu na to či obsahujĂș takĂ©to neviditeÄŸnĂ© metadĂĄta, alebo nie.

    +
    +
    +

    NĂĄstroje

    +

    Zopfli a PNGOUT sĂș veÄŸmi dobrĂ© PNG kompresory, ale sĂș veÄŸmi pomalĂ©. ZakĂĄĆŸte ich, ak potrebujete rĂœchlo optimalizovaĆ„ sĂșbory PNG (ponechajte len AdvPNG pre najrĂœchlejĆĄiu, ale stĂĄle dobrĂș kompresiu).

    +

    Zopfli a OptiPNG vyčistĂ­ RGB hodnoty pre transparentnĂ© pixely (znĂĄme ako "ĆĄpinavĂ© alpha"). ZakĂĄĆŸte tieto dva nĂĄstroje, ak optimalizujete ĆĄpeciĂĄlne sĂșbory, ktorĂ© pouĆŸĂ­vajĂș alfa kanĂĄl na niečo inĂ©ho, neĆŸ transparentnosĆ„ (napr. vĂœĆĄkovĂĄ mapa v dĂĄtovĂœch sĂșboroch hier).

    +
    +

    JPEGOptim

    +
    +
    MaximĂĄlna kvalita
    +
    +

    Ak je nastavené na 100%, optimalizåcia bude bezstratovå.

    +

    ČokoÄŸvek pod 100% spĂŽsobĂ­ niĆŸĆĄiu kvalitu sĂșborov, ak sa zdĂĄ, ĆŸe boli uloĆŸenĂ© s nastavenĂ­m vyĆĄĆĄej kvality.

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Typ optimalizĂĄcie
    +
    +

    PNGOUT je veÄŸmi ĂșčinnĂœ, ale tieĆŸ veÄŸmi pomalĂœ. PouĆŸitie niĆŸĆĄiu Ășroveƈ, ak ste netrpezlivĂ­.

    +
    +
    PreruƥiƄ, ak to trvå príliƥ dlho
    +
    +

    PNGOUT mĂŽĆŸe potrebovaĆ„ veÄŸa času na optimalizĂĄciu veÄŸmi veÄŸkĂœch obrĂĄzkov. TĂĄto moĆŸnosĆ„ elegantne preruĆĄĂ­ PNGOUT po 1 minĂște.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    Úroveƈ optimalizácie
    +
    +

    Počet vyskĂșĆĄanĂœch kombinĂĄciĂ­ rĂŽznych nastavenĂ­. MĂĄlokedy mĂĄ zmysel vyskĂșĆĄaĆ„ ich vĆĄetky.

    +
    +
    SpraviƄ obråzky prekladané (progresívne)
    +
    +

    PrekladanĂ© obrĂĄzky vyzerajĂș lepĆĄie, keď sĂș čiastočne načítanĂ©, ale obvykle prekladanie robĂ­ kompresiu menej efektĂ­vnu.

    +

    Toto políčko mĂĄ tri stavy: Ak je zaĆĄkrtnutĂ©, obrĂĄzky budĂș prekladanĂ©. Ak je zmieĆĄanĂ©, zachovĂĄ prekladanie sĂșboru nezmenenĂ© a ak je nezaĆĄkrtnutĂ©, odstrĂĄni prekladanie zo sĂșborov.

    +
    +
    +
    +
    +

    Gifsicle

    +

    Pre najlepĆĄiu kompresiu, by ste mali previesĆ„ sĂșbory GIF na PNG (ImageOptim to nerobĂ­ automaticky).

    +
    + + diff --git a/imageoptim/sk.lproj/ImageOptim.strings b/imageoptim/sk.lproj/ImageOptim.strings new file mode 100644 index 00000000..c333d49e --- /dev/null +++ b/imageoptim/sk.lproj/ImageOptim.strings @@ -0,0 +1,215 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "PriniesĆ„ vĆĄetko do popredia"; + +/* Menu Item "Window" */ +"19.title" = "Okno"; + +/* Menu Item "Minimize" */ +"23.title" = "ZmenĆĄiĆ„"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Okno"; + +/* Top-level Main Menu "Services" */ +"130.title" = "SluĆŸby"; + +/* Menu Item "Services" */ +"131.title" = "SluĆŸby"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "SkryĆ„ ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "UkončiĆ„ ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "SkryĆ„ ostatnĂ©"; + +/* Menu Item "Show All" */ +"150.title" = "ZobraziĆ„ vĆĄetky"; + +/* Menu Item "Zoom" */ +"197.title" = "ZvĂ€ÄĆĄenie"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Zoznam sĂșborov na optimalizĂĄciu"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "SĂșbor"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "VeÄŸkosĆ„"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "VeÄŸkosĆ„ sĂșboru po optimalizĂĄcii"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "VeÄŸkosĆ„ sĂșboru po optimalizĂĄcii"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Úspora"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Stav"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "O ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "Nastavenia..."; + +/* Menu Item "Edit" */ +"375.title" = "UpraviĆ„"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "UpraviĆ„"; + +/* Menu Item "Select All" */ +"377.title" = "VybraĆ„ vĆĄetko"; + +/* Menu Item "Undo" */ +"378.title" = "SpÀƄ"; + +/* Menu Item "Redo" */ +"384.title" = "Znovu"; + +/* Menu Item "Cut" */ +"398.title" = "VystrihnĂșĆ„"; + +/* Menu Item "Copy" */ +"399.title" = "KopĂ­rovaĆ„"; + +/* Menu Item "Paste" */ +"400.title" = "PrilepiĆ„"; + +/* Menu Item "Delete" */ +"402.title" = "ZmazaĆ„"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "PridaĆ„ novĂ© sĂșbory alebo adresĂĄre"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "PridaĆ„"; + +/* Menu Item "File" */ +"429.title" = "SĂșbor"; + +/* Top-level Main Menu "File" */ +"430.title" = "SĂșbor"; + +/* Menu Item "Add Files
" */ +"437.title" = "PridaĆ„ sĂșbory..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Stav optimalizĂĄcie"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Stav optimalizĂĄcie"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "ZavrieĆ„ okno"; + +/* Top-level Main Menu "Help" */ +"505.title" = "PomocnĂ­k"; + +/* Menu Item "Help" */ +"504.title" = "PomocnĂ­k"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "NĂĄpoveda k ImageOptim"; + +/* Window Title "About ImageOptim" */ +"526.title" = "O programe ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "OptimalizovaĆ„ znova"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "SkontrolovaĆ„ aktualizĂĄcie..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Ć€ahaĆ„ a pustiĆ„ obrĂĄzkovĂ© sĂșbory do oblasti vyĆĄĆĄie"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Znova spustiĆ„ optimalizĂĄcie"; + +/* Button "Again" */ +"635.title" = "Znova"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "verzia"; + +/* TextFieldCell "version" */ +"646.title" = "verzia"; + +/* Menu Item "Tools" */ +"655.title" = "NĂĄstroje"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "NĂĄstroje"; + +/* Menu Item "Quick Look" */ +"708.title" = "RĂœchly nĂĄhÄŸad"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Tu pustiĆ„ obrĂĄzky"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Zmazanie dokončenĂ©"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "OptimalizovaĆ„ optimalizovanĂ©"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "WebovĂ© strĂĄnky ImageOptim"; + +/* Menu Item "View Source" */ +"735.title" = "ZobraziĆ„ zdroj"; + +/* Menu Item "Optimized Size" */ +"740.title" = "OptimalizovanĂĄ veÄŸkosĆ„"; + +/* Menu Item "Savings" */ +"741.title" = "Úspora"; + +/* Menu Item "Best tool" */ +"747.title" = "NajlepĆĄĂ­ nĂĄstroj"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "NajlepĆĄĂ­ nĂĄstroj"; + +/* Menu Item "Original Size" */ +"791.title" = "PĂŽvodnĂĄ veÄŸkosĆ„"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "PĂŽvodnĂĄ veÄŸkosĆ„"; + +/* Menu Item "Show Columns" */ +"809.title" = "Zobrazenie stÄșpcov"; + +/* Menu Item "Donate" */ +"820.title" = "DarovaĆ„ / Donate"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "VrĂĄtiĆ„ na originĂĄl"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Kvalita: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "ZastaviĆ„"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "KopĂ­rovaĆ„ ako Ășdaje URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "ZobraziĆ„ vo Finderi"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "StratovĂ© zmenĆĄenie"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "ZobraziĆ„ vo Finderi"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Stav"; diff --git a/imageoptim/sk.lproj/Localizable.strings b/imageoptim/sk.lproj/Localizable.strings new file mode 100644 index 00000000..4dcd907c --- /dev/null +++ b/imageoptim/sk.lproj/Localizable.strings @@ -0,0 +1,54 @@ +/* tooltip */ +"%@ failed to start" = "%@ sa nepodarilo spustiĆ„"; + +/* undo command name */ +"Add" = "PridaĆ„"; + +/* undo command name */ +"Cut" = "VystrihnĂșĆ„"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "VĆĄetky potrebnĂ© nĂĄstroje boli v Nastaveniach zakĂĄzanĂ©"; + +/* tooltip, generic loading error */ +"Can't open the file" = "SĂșbor sa nedĂĄ otvoriĆ„"; + +/* tooltip */ +"File cannot be optimized any further" = "SĂșbor sa uĆŸ nedĂĄ viac vylepĆĄiĆ„"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "SĂșbor nie je PNG, GIF ani JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim bude po dokončenĂ­ optimalizĂĄciĂ­ ukončenĂœ"; + +/* tooltip */ +"Inspecting file" = "SĂșbor sa skĂșma"; + +/* newly added to the queue */ +"New file" = "NovĂœ sĂșbor"; + +/* status bar */ +"Lossy minification enabled" = "PovolenĂ© stratovĂ© zmenĆĄenie"; + +/* tooltip */ +"Optimized file could not be saved" = "OptimalizovanĂœ sĂșbor sa nepodarilo uloĆŸiĆ„"; + +/* tooltip */ +"Optimized successfully with %@" = "OptimalizovanĂ© ĂșspeĆĄne s %@"; + +/* tooltip */ +"Reverted to original" = "VrĂĄtenĂ© na originĂĄl"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "UĆĄetrenĂ© %1$@ z %2$@. %3$@ celkom (aĆŸ do %4$@ na sĂșbor)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "UĆĄetrenĂ© %1$@ z %2$@. %3$@ priemerne na sĂșbor (aĆŸ do %4$@)"; + +/* command name, tooltip */ +"Started %@" = "SpustenĂœ %@"; + +/* tooltip */ +"Waiting to be optimized" = "ČakĂĄ na optimalizĂĄciu"; + diff --git a/imageoptim/sk.lproj/PrefsController.strings b/imageoptim/sk.lproj/PrefsController.strings new file mode 100644 index 00000000..a1121eb2 --- /dev/null +++ b/imageoptim/sk.lproj/PrefsController.strings @@ -0,0 +1,66 @@ +/* Window title */ +"5.title" = "Nastavenia ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "VĆĄeobecnĂ©"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "RĂœchlosĆ„ optimalizĂĄcie"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Kvalita"; + +/* Title in box "Writing files to disk" */ +"280.title" = "ZĂĄpis sĂșborov na disk"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "ZachovaĆ„ prĂĄva k sĂșborom, vlastnosti a tvrdĂ© odkazy"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Úroveƈ optimalizĂĄcie"; + +/* "Fast" */ +"819.title" = "RĂœchla"; + +/* "Insane" */ +"820.title" = "Ć ialenĂĄ"; + +/* "Normal" */ +"821.title" = "NormĂĄlna"; + +/* Checkbox in Preferences */ +"854.title" = "OdstrĂĄniĆ„ metadĂĄta z PNG (gama, farebnĂ© profily, nepovinnĂ© kusy)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "WebovĂ© prehliadače vyĆŸadujĂș, aby boli gama kusy odstrĂĄnenĂ©"; + +/* label "JPEG quality" */ +"868.title" = "JPEG kvalita"; + +/* Checkbox in Preferences */ +"911.title" = "OdstrĂĄniĆ„ metadĂĄta z JPEG (EXIF, farebnĂ© profily, GPS, rotĂĄcia, atď.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "MetadĂĄta a farebnĂ© profily"; + +/* Header above list of tools to enable */ +"1107.title" = "PovoliĆ„"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Ukladanie na sieĆ„ovĂ© disky je rĂœchlejĆĄie, keď nie sĂș zachovanĂ© prĂĄva"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "NeodporĂșča sa, ak spoliehate na vloĆŸenĂ© informĂĄcie o autorskĂœch prĂĄvach"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "Kvalita GIF"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "RobĂ­ sĂșbory oveÄŸa menĆĄĂ­mi, ale mĂŽĆŸe zmeniĆ„ vzhÄŸad obrĂĄzkov"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "Kvalita PNG"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "PovoliĆ„ stratovĂ© zmenĆĄovanie"; + diff --git a/imageoptim/style.css b/imageoptim/style.css index 46137d9f..b566c611 100644 --- a/imageoptim/style.css +++ b/imageoptim/style.css @@ -1,6 +1,5 @@ html {font: 10pt/1.2 "Lucida Grande",sans-serif; margin:0;padding:0} body {margin:0;padding:10px} -a[name]{display:none} dt {font-weight:bold;} dd {margin:0.2em 0 0;padding:0 0 0 1em;} dd p:first-child {margin-top:0;} @@ -15,4 +14,4 @@ h2,h3,h4 {margin:1em 0 0.5em;} @media screen and (min-width:1100px) { #jpegoptim, #advpng, #optipng, #pngout,#pngcrush,#gifsicle,#jpegrescan {width:27%} -} \ No newline at end of file +} diff --git a/imageoptim/sv.lproj/Credits.html b/imageoptim/sv.lproj/Credits.html new file mode 100644 index 00000000..6159eed9 --- /dev/null +++ b/imageoptim/sv.lproj/Credits.html @@ -0,0 +1,31 @@ +
    +

    ImageOptim av Kornel LesiƄski och medarbetare Ă€r ett grafiskt grĂ€nssnitt för följande verktyg:

    + +

    ImageOptim fÄr distribueras och modifieras under +GNU General Public License version 2 eller senare. PNGOUT tÀcks +inteav GPL och medföljer med tillstÄnd frÄn Ardfry Imaging, LLC.

    +

    ÖversĂ€ttning av Peeter SĂ€llström Randsalu.

    +
    diff --git a/imageoptim/sv.lproj/Credits.rtf b/imageoptim/sv.lproj/Credits.rtf deleted file mode 100644 index ad60b8ca..00000000 --- a/imageoptim/sv.lproj/Credits.rtf +++ /dev/null @@ -1,25 +0,0 @@ -{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320 -{\fonttbl\f0\fnil\fcharset0 LucidaGrande;} -{\colortbl;\red255\green255\blue255;\red0\green7\blue240;\red0\green8\blue242;} -{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{disc\}}{\leveltext\leveltemplateid1\'01\uc0\u8226 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} -{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} -\paperw11900\paperh16840\margl1440\margr1440\vieww12000\viewh9600\viewkind0 -\deftab720 -\pard\pardeftab720\li200\sa240 -{\field{\*\fldinst{HYPERLINK "http://pornel.net/imageoptim/en"}}{\fldrslt -\f0\fs22 \cf2 \ul \ulc2 ImageOptim}} -\f0\fs22 av Kornel Lesi\uc0\u324 ski och medarbetare \'e4r ett grafiskt gr\'e4nssnitt f\'f6r f\'f6ljande verktyg:\ -\pard\tqc\tx500\pardeftab720\li740\fi-540 -\ls1\ilvl0\cf0 {\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://optipng.sourceforge.net/"}}{\fldrslt \cf2 \ul \ulc2 OptiPNG}} av Cosmin Truta,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://pmt.sourceforge.net/pngcrush/"}}{\fldrslt \cf2 \ul \ulc2 PNGCrush}} av Glenn Randers-Pehrson,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://advancemame.sourceforge.net/doc-advpng.html"}}{\fldrslt \cf2 \ul \ulc2 AdvPNG}} av Andrea Mazzoleni, Filipe Estima,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.kokkonen.net/tjko/projects.html"}}{\fldrslt \cf2 \ul \ulc2 Jpegoptim}} av Timo Kokkonen,\ -{\listtext \'95 }{\field{\*\fldinst{HYPERLINK "http://www.lcdf.org/gifsicle/"}}{\fldrslt Gifsicle}} av Eddie Kohler,\ -{\listtext \'95 }och {\field{\*\fldinst{HYPERLINK "http://www.advsys.net/ken/utils.htm"}}{\fldrslt \cf2 \ul \ulc2 PNGOUT}} av Ken Silverman.\ -\pard\pardeftab720\li200 -\cf0 \ -\pard\pardeftab720\li200\sa240 -\cf0 ImageOptim f\'e5r distribueras och modifieras under {\field{\*\fldinst{HYPERLINK "http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"}}{\fldrslt \cf3 \ul \ulc3 GNU General Public License version 2 eller senare}}. PNGOUT t\'e4cks -\b inte -\b0 av GPL och medf\'f6ljer med tillst\'e5nd fr\'e5n Ardfry Imaging, LLC.\ -\'d6vers\'e4ttning av Peeter S\'e4llstr\'f6m Randsalu.} \ No newline at end of file diff --git a/imageoptim/sv.lproj/Help/Help.helpindex b/imageoptim/sv.lproj/Help/Help.helpindex deleted file mode 100644 index b104c4b6..00000000 Binary files a/imageoptim/sv.lproj/Help/Help.helpindex and /dev/null differ diff --git a/imageoptim/sv.lproj/Help/index.html b/imageoptim/sv.lproj/Help/index.html index 8039a406..50c03300 100644 --- a/imageoptim/sv.lproj/Help/index.html +++ b/imageoptim/sv.lproj/Help/index.html @@ -1,78 +1,63 @@ - - - + + - - - Codestin Search App - - - - - - + +Codestin Search App + + + - - main - -

    ImageOptim

    +

    ImageOptim

    AnvÀndning

      -
    1. Dra filer i PNG- eller JPEG-format eller mappar till ImageOptims huvudfönster.
    2. +
    3. Dra filer i PNG- eller JPEG-format eller mappar till ImageOptims huvudfönster.
    4. VÀnta tills det Àr klart.
    5. Vinst! (genom mindre filer)
    - -

    Man kan ocksÄ dra filer till ImageOptims ikon i Dockan.

    +

    Man kan ocksÄ dra filer till ImageOptims ikon i Dockan.

    Hur instÀllningarna fungerar.

    Ikoner i filvyn

    - - + + - - - + + - - - + + - - - + + - - - + + -
    Green Checkmark
    Green Checkmark Bilden har optimerats.
    Green X
    Green X Allt gick bra, men bilden kunde inte optimeras mer.
    Gray star
    Gray star Filen hÄller pÄ att optimeras.
    Gray dots
    Gray dots Filen stÄr i kö för att optimeras nÀr alla andra filer Àr klara.
    Orange exclamation mark
    Orange exclamation mark NÄgot blev fel under optimeringen. Kör Systemmeddelanden.app för att fÄ en förklaring.
    - -

    Hur fungerar det?

    + +

    Hur fungerar det?

    ImageOptim Àr ett grafiskt grÀnssnitt (GUI) för följande program:

      -
    • OptiPNG
    • +
    • OxiPNG
    • PNGCrush
    • @@ -80,11 +65,10 @@

      Hur fungerar det?

    • JpegOptim
    • -
    • JpegTran
    • +
    • MozJPEG
    • och eventuellt PNGOUT.
    - -

    ImageOptim kör programmen och vÀljer automatiskt den minsta filen.

    +

    ImageOptim kör programmen och vÀljer automatiskt den minsta filen.

    diff --git a/imageoptim/sv.lproj/Help/prefs.html b/imageoptim/sv.lproj/Help/prefs.html index 5615aeed..6eedf503 100644 --- a/imageoptim/sv.lproj/Help/prefs.html +++ b/imageoptim/sv.lproj/Help/prefs.html @@ -1,104 +1,77 @@ - - + + + + Codestin Search App - - - - - -general -

    ImageOptim InstÀllningar

    -

    « Tillbaka

    -

    Dessa behöver antagligen inte Àndras.

    -

    AllmÀnna instÀllningar

    -
    -
    BehÄll filbehörigheter, attribut och hÄrda lÀnkar
    -
    -

    Byter ut den gamla filen mot en ny fil pÄ plats. Det gör att alla hÄrda lÀnkar, alias och filens Àgare, behörigheter och utökade attribut förblir desamma. -

    Det gÄr lite snabbare om man inte behÄller behörigheter. -

    Gör en backup av originalfilerna före sparande -

    Gör en kopia av filen med ~ tillagt till filnamnet. Det gör optimeringen lite lÄngsammare och fyller din hÄrddisk med backupfiler.

    - -
    Ta bort alla valfria stycken
    -

    BehÄll förkryssad om du optimerar för webben. StÀng av om du har speciella PNG-filer med extra metadata.

    -
    Ta bort EXIF-data och kommentarer frÄn filer
    -

    Tar bort bildens metadata, som namnet pÄ bildbehandlingsprogrammet eller pÄ kameramodellen som skapade filen.

    - -
    -
    -jpegoptim -

    JPEGOptim

    -
    -
    Aktiverad
    -

    ImageOptim försöker optimera JPEG-filer.

    + + + +

    ImageOptim InstÀllningar

    +

    « Tillbaka

    +

    AllmÀnna instÀllningar

    +
    +
    BehÄll filbehörigheter, attribut och hÄrda lÀnkar
    +
    +

    Byter ut den gamla filen mot en ny fil pÄ plats. Det gör att alla hÄrda lÀnkar, alias och filens Àgare, behörigheter och utökade attribut förblir desamma.

    +

    Det gÄr lite snabbare om man inte behÄller behörigheter.

    +
    +
    Ta bort alla valfria stycken
    +
    +

    BehÄll förkryssad om du optimerar för webben. StÀng av om du har speciella PNG-filer med extra metadata.

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    Ta bort EXIF-data och kommentarer frÄn filer
    +
    +

    Tar bort bildens metadata, som namnet pÄ bildbehandlingsprogrammet eller pÄ kameramodellen som skapade filen.

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    Maxkvalitet
    -

    Om det stÄr pÄ 100%, blir det en icke-förstörande komprimering.

    -

    Allt under 100% skapar filer av lÀgre kvalitet Àn om de sparas med den högsta instÀllningen.

    - -
    +
    +

    Om det stÄr pÄ 100%, blir det en icke-förstörande komprimering.

    +

    Allt under 100% skapar filer av lÀgre kvalitet Àn om de sparas med den högsta instÀllningen.

    +
    +
    -
    -pngout -

    PNGOUT

    -
    -
    Aktiverad
    -

    ImageOptim försöker optimera PNG-filer med verktyget PNGOUT. -

    PNGOUT Àr inte inkluderat med ImageOptim. Det Àr ett fantastiskt verktyg, men PNGOUT:s skapare tillÄter inte distribution av programmet, sÄ du mÄste ladda ner PNGOUT sjÀlv.

    - -
    -
    Optimeringstyp
    -

    PNGOUT Àr vÀldigt effektivt, men vÀldigt lÄngsamt. AnvÀnd lÀgre vÀrden om du Àr otÄlig.

    - -
    Avbryt om det tar för lÄng tid
    -

    PNGOUT kan ta lÄng tid pÄ sig för att optimera stora bilder. Den hÀr instÀllningen avbryter PNGOUT efter en minut.

    -
    +
    +

    PNGOUT

    +
    +
    Optimeringstyp
    +
    +

    PNGOUT Àr vÀldigt effektivt, men vÀldigt lÄngsamt. AnvÀnd lÀgre vÀrden om du Àr otÄlig.

    +
    +
    Avbryt om det tar för lÄng tid
    +
    +

    PNGOUT kan ta lÄng tid pÄ sig för att optimera stora bilder. Den hÀr instÀllningen avbryter PNGOUT efter en minut.

    +
    +
    -
    -advpng -

    AdvPNG

    -
    -
    Aktiverad
    -

    ImageOptim försöker optimera PNG-filer med verktyget AdvPNG.

    - -
    -
    OptimeringsnivÄ
    -

    AdvPNG Àr ganska snabbt, sÄ man kan anvÀnda maxvÀrdet.

    -
    -
    -
    -optipng -

    OptiPNG

    -
    -
    Aktiverad
    -

    ImageOptim försöker optimera PNG-filer med verktyget OptiPNG.

    - -
    -
    OptimeringsnivÄ
    -

    Det finns ett antal olika instÀllningskombinationer. Det Àr oftast inte lönt att prova alla.

    - -
    SammanflÀta bilder (progressivt)
    -

    SammanflÀtade bilder ser bÀttre ut nÀr de Àr delvis nedladdade, men komprimeringen blir oftast mindre effektiv.

    -

    Det finns tre möjligheter: en bock gör att alla bilder blir sammanflÀtade, ett streck behÄller filens instÀllningar, och en tom ruta tar bort sammanflÀtning frÄn filer.

    -
    -
    -
    -gifsicle -

    Gifsicle

    -
    -
    Aktiverad
    -

    ImageOptim försöker optimera GIF-filer med verktyget Gifsicle. - -

    GIF-filer Àndras till sammanflÀtade eller avsammanflÀtade automatiskt, beroende pÄ vad som ger minst filer. Kommentarer i filerna tas bort.

    -

    OBS. Gifsicle fungerar bÀst med animerade GIF:ar. Icke-animerade GIF:ar kan sÀllan optimeras.

    - -

    För bÀsta komprimering bör du konvertera GIF-filer till PNG-filer (ImageOptim gör inte detta automatiskt).

    -
    -
    -jpegrescan -

    JpegRescan

    - -

    Jpegrescan Àr ett skript som bygger pÄ jpegtran. Det skapar JPEG-filer med ovanligt mÄnga progressiva skanningar för att fÄ bÀttre komprimering, men sÄdana filer kanske inte fungerar i alla webblÀsare.

    +
    +

    OxiPNG

    +
    +
    OptimeringsnivÄ
    +
    +

    Det finns ett antal olika instÀllningskombinationer. Det Àr oftast inte lönt att prova alla.

    +
    +
    SammanflÀta bilder (progressivt)
    +
    +

    SammanflÀtade bilder ser bÀttre ut nÀr de Àr delvis nedladdade, men komprimeringen blir oftast mindre effektiv.

    +

    Det finns tre möjligheter: en bock gör att alla bilder blir sammanflÀtade, ett streck behÄller filens instÀllningar, och en tom ruta tar bort sammanflÀtning frÄn filer.

    +
    +
    +
    +

    Gifsicle

    +

    För bÀsta komprimering bör du konvertera GIF-filer till PNG-filer (ImageOptim gör inte detta automatiskt).

    +
    + + diff --git a/imageoptim/sv.lproj/ImageOptim.strings b/imageoptim/sv.lproj/ImageOptim.strings new file mode 100644 index 00000000..63fc54c7 --- /dev/null +++ b/imageoptim/sv.lproj/ImageOptim.strings @@ -0,0 +1,198 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Visa alla"; + +/* Menu Item "Window" */ +"19.title" = "Fönster"; + +/* Menu Item "Minimize" */ +"23.title" = "Minimera"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Fönster"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "Huvudmeny"; + +/* Top-level Main Menu "Services" */ +"130.title" = "TjĂ€nster"; + +/* Menu Item "Services" */ +"131.title" = "TjĂ€nster"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "Göm ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "StĂ€ng ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "Göm övriga"; + +/* Menu Item "Show All" */ +"150.title" = "Visa alla"; + +/* Menu Item "Zoom" */ +"197.title" = "Zooma"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Lista över filer som ska optimeras"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Fil"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Storlek"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Filstorlek efter optimering"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Du har sparat"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Om ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "InstĂ€llningar
"; + +/* Menu Item "Edit" */ +"375.title" = "Redigera"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Redigera"; + +/* Menu Item "Select All" */ +"377.title" = "Markera allt"; + +/* Menu Item "Undo" */ +"378.title" = "Ångra"; + +/* Menu Item "Redo" */ +"384.title" = "Gör om"; + +/* Menu Item "Cut" */ +"398.title" = "Klipp ut"; + +/* Menu Item "Copy" */ +"399.title" = "Kopiera"; + +/* Menu Item "Paste" */ +"400.title" = "Klistra in"; + +/* Menu Item "Delete" */ +"402.title" = "Radera"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "LĂ€gg till nya filer eller mappar"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "LĂ€gg till"; + +/* Menu Item "File" */ +"429.title" = "Arkiv"; + +/* Top-level Main Menu "File" */ +"430.title" = "Arkiv"; + +/* Menu Item "Add Files
" */ +"437.title" = "LĂ€gg till filer
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimeringsstatus"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimeringsstatus"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "StĂ€ng"; + +/* Menu Item "Help" */ +"504.title" = "HjĂ€lp"; + +/* Top-level Main Menu "Help" */ +"505.title" = "HjĂ€lp"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim HjĂ€lp"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Om ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Optimera igen"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Sök efter uppdateringar
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Dra bildfiler till omrĂ„det ovan"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Optimera igen"; + +/* Button "Again" */ +"635.title" = "Igen"; + +/* Menu Item "Tools" */ +"655.title" = "Verktyg"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Verktyg"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Dra bilder hit"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Raderad"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimerad"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptims webbsida"; + +/* Menu Item "View Source" */ +"735.title" = "Visa kĂ€llkod"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Optimerad storlek"; + +/* Menu Item "Savings" */ +"741.title" = "Du har sparat"; + +/* Menu Item "Best tool" */ +"747.title" = "BĂ€sta verktyg"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "BĂ€sta verktyg"; + +/* Menu Item "Original Size" */ +"791.title" = "Originalstorlek"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Originalstorlek"; + +/* Menu Item "Show Columns" */ +"809.title" = "Visa kolumner"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "ÅterstĂ€ll till originalet"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Kvalitet: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Avbryt"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopiera Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "Visa i Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "Lossy minifiering"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "Visa i Finder"; + diff --git a/imageoptim/sv.lproj/Localizable.strings b/imageoptim/sv.lproj/Localizable.strings index 260db0eb..77418c61 100644 --- a/imageoptim/sv.lproj/Localizable.strings +++ b/imageoptim/sv.lproj/Localizable.strings @@ -1,27 +1,59 @@ +/* tooltip */ +"%@ failed to start" = "%@ kunde inte startas"; + +/* undo command name */ +"Add" = "LĂ€gg till"; + +/* tooltip */ "All neccessary tools have been disabled in Preferences" = "Alla verktyg som behövs har stĂ€ngts av i instĂ€llningarna"; -"Can't map file into memory" = "Kan inte lĂ€sa in filen i minnet"; +/* tooltip, generic loading error */ +"Can't open the file" = "Kan inte lĂ€sa in filen i minnet"; + +/* undo command name */ +"Cut" = "Klipp ut"; +/* tooltip */ "File cannot be optimized any further" = "Det gĂ„r inte att optimera filen mer"; +/* tooltip */ "File is neither PNG, GIF nor JPEG" = "Filen Ă€r varken i PNG- eller JPG-format"; +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim kommer avslutas nĂ€r optimeringarna Ă€r fĂ€rdiga"; + +/* tooltip */ "Inspecting file" = "Inspekterar fil"; +/* kilobytes suffix */ +"KB" = " KB"; + +/* megabytes suffix */ +"MB" = " MB"; + +/* newly added to the queue */ "New file" = "Ny fil"; +/* status bar */ +"Lossy minification enabled" = "Lossy minifiering aktiverat"; + +/* tooltip */ "Optimized file could not be saved" = "Den optimerade filen kunde inte sparas"; +/* tooltip */ "Optimized successfully with %@" = "Optimering med %@ lyckades"; -"Size of optimized file is 0" = "Den optimerade filens storlek Ă€r 0"; - -"Started %@" = "%@ har startat"; +/* tooltip */ +"Reverted to original" = "ÅterstĂ€llde till originalet"; -"Waiting in queue" = "VĂ€ntar i kö"; +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Sparar %1$@ av totalt %2$@. %3$@ per fil i genomsnitt (upp till %4$@ per fil)"; -"Waiting to be optimized" = "VĂ€ntar pĂ„ optimering"; +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Sparat %1$@ av totalt %2$@. %3$@ per fil i genomsnitt (upp till %4$@)"; -"Waiting to start more optimisations" = "VĂ€ntar pĂ„ att start fler optimeringar"; +/* command name, tooltip */ +"Started %@" = "%@ har startat"; -"%@ failed to start" = "%@ kunde inte startas"; \ No newline at end of file +/* tooltip */ +"Waiting to be optimized" = "VĂ€ntar pĂ„ optimering"; diff --git a/imageoptim/sv.lproj/MainMenu.xib b/imageoptim/sv.lproj/MainMenu.xib deleted file mode 100644 index f4c07b80..00000000 --- a/imageoptim/sv.lproj/MainMenu.xib +++ /dev/null @@ -1,3484 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSTextView - NSMenu - NSButton - NSCustomObject - NSArrayController - NSImageView - NSImageCell - NSTableView - NSCustomView - NSTextField - NSNumberFormatter - NSWindowTemplate - NSTextFieldCell - NSButtonCell - NSTableColumn - NSView - NSScrollView - NSUserDefaultsController - NSProgressIndicator - NSScroller - NSMenuItem - NSTableHeaderView - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - NSApplication - - - FirstResponder - - - NSApplication - - - 4111 - 2 - {{759, 745}, {549, 297}} - 813171712 - ImageOptim - NSWindow - - View - - - {1200, 2000} - {411, 110} - - - 256 - - - - 274 - - - - 2304 - - - - 274 - {549, 242} - - - YES - - - 256 - {549, 17} - - - - - - - -2147483392 - {{567, 1}, {16, 17}} - - - - status - 22 - 22 - 22 - - 75628096 - 134219776 - - - LucidaGrande - 11 - 3100 - - - 6 - System - headerColor - - 3 - MQA - - - - 6 - System - headerTextColor - - 3 - MAA - - - - - 130560 - 33554432 - - 549453824 - {17, 17} - - 3 - MCAwAA - - - 0 - 2 - 0 - NO - - - - statusOrder - YES - compare: - - Optimeringsstatus - - - filename - 345 - 100 - 1000 - - 75628096 - 2048 - Fil - - - 3 - MC4zMzMzMzI5OQA - - - - - 67239488 - 6208 - - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlBackgroundColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - - - 3 - YES - - - fileName - YES - caseInsensitiveCompare: - - - - originalsize - 85 - 60 - 120 - - 75628096 - 67110912 - Originalstorlek - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - YES - - - size - 85 - 85 - 85 - - 75628096 - 67110912 - Storlek - - - - - - 67239488 - 67115072 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - savings - 85 - 85 - 85 - - 75628096 - 67110912 - Du har sparat - - - - - - 67239488 - 67115072 - - - - - - - - - - - - -∞ - - - +∞ - - - #,##0.0% - #,##0.0% - - - - - - - - NaN - - - - - - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - besttool - 85 - 40 - 150 - - 75628096 - 2048 - BĂ€sta verktyg - - - - - - 67239488 - 6208 - - - - - - - 3 - YES - - YES - - - 3 - 2 - - - 6 - System - gridColor - - 3 - MC41AA - - - 17 - -608141312 - - - Files - 1 - 15 - 0 - YES - 0 - 1 - - - {{0, 17}, {549, 242}} - - - - - 4 - - - - -2147483392 - {{567, 18}, {15, 277}} - - - - _doScroller: - 0.99609375 - - - - -2147483392 - {{-100, -100}, {524, 15}} - - - 1 - - _doScroller: - 0.97943930000000001 - - - - 2304 - - - - {549, 17} - - - - - 4 - - - {{0, 39}, {549, 259}} - - - 133648 - - - - - AAAAAAAAAABBmAAAQZgAAA - - - - 292 - {{43, 12}, {410, 14}} - - - YES - - 67239488 - 306321472 - Dra bildfiler till omrĂ„det ovan - - - - - - - - 292 - {{8, 6}, {30, 25}} - - - YES - - 67239424 - 134217728 - LĂ€gg till - - - -2030812929 - 35 - - NSImage - NSAddTemplate - - - - - - - - 1313 - - {{434, 11}, {16, 16}} - - - 28938 - 100 - - - - 289 - {{458, 6}, {71, 25}} - - YES - - 67239424 - 134217728 - Igen - - - -2034482945 - 268435491 - - NSImage - NSRefreshTemplate - - Optimera igen - r - - - - - 274 - {{0, 39}, {549, 258}} - - - _NS:499 - DragDropImageView - - - {549, 297} - - - {{0, 0}, {2560, 1578}} - {411, 132} - {1200, 2022} - MainWindow - NO - 39 - YES - - - Huvudmeny - - - - ImageOptim - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - ImageOptim - - - - Om ImageOptim - - 2147483647 - - - - - - Sök efter uppdateringar
 - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - InstĂ€llningar
 - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - TjĂ€nster - - 1048576 - 2147483647 - - - submenuAction: - - TjĂ€nster - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Göm ImageOptim - h - 1048576 - 2147483647 - - - - - - Göm övriga - h - 1572864 - 2147483647 - - - - - - Visa alla - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - StĂ€ng ImageOptim - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - Arkiv - - 1048576 - 2147483647 - - - submenuAction: - - Arkiv - - - - LĂ€gg till filer
 - o - 1048576 - 2147483647 - - - - - - Optimera igen - r - 1048576 - 2147483647 - - - - - - YES - YES - Optimerad - r - 1572864 - 2147483647 - - - - - - Quick Look - y - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - StĂ€ng - w - 1048576 - 2147483647 - - - - - - - - - Redigera - - 1048576 - 2147483647 - - - submenuAction: - - Redigera - - - - Ångra - z - 1048576 - 2147483647 - - - - - - Gör om - Z - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Klipp ut - x - 1048576 - 2147483647 - - - - - - Kopiera - c - 1048576 - 2147483647 - - - - - - Klistra in - v - 1048576 - 2147483647 - - - - - - Radera - CA - 1048576 - 2147483647 - - - - - - YES - YES - Raderad - CA - 1572864 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Markera allt - a - 1048576 - 2147483647 - - - - - - - - - Verktyg - - 2147483647 - - - submenuAction: - - Verktyg - - - - OptiPNG - - 2147483647 - - - - - - PNGCrush - - 2147483647 - - - - - - AdvPNG - - 2147483647 - - - - - - PNGOUT - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Jpegtran - - 2147483647 - - - - - - JPEGOptim - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Gifsicle - - 2147483647 - - - - - - - - - Fönster - - 1048576 - 2147483647 - - - submenuAction: - - Fönster - - - - Minimera - m - 1048576 - 2147483647 - - - - - - Zooma - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Visa alla - - 1048576 - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Visa kolumner - - 2147483647 - - - submenuAction: - - - - - - Originalstorlek - - 2147483647 - - - - - - Optimerad storlek - - 2147483647 - 1 - - - - - - Du har sparat - - 2147483647 - 1 - - - - - - BĂ€sta verktyg - - 2147483647 - - - - - - - - _NSWindowsMenu - - - - - HjĂ€lp - - 1048576 - 2147483647 - - - submenuAction: - - HjĂ€lp - - - - ImageOptim HjĂ€lp - - 1048576 - 2147483647 - - - - - - ImageOptims webbsida - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Visa kĂ€llkod - - 2147483647 - - - - - - - - _NSMainMenu - - - ImageOptim - - - - fileName - byteSize - byteSizeOptimized - percentOptimized - isOptimized - percentDone - statusImage - AdvPngEnabled - - File - YES - - YES - YES - - - 3 - 2 - {{682, 258}, {295, 370}} - -260570112 - Om ImageOptim - NSPanel - - View - - - {465, 570} - {211, 243} - - - 256 - - - - 269 - - Apple PDF pasteboard type - Apple PICT pasteboard type - Apple PNG pasteboard type - NSFilenamesPboardType - NeXT Encapsulated PostScript v1.2 pasteboard type - NeXT TIFF v4.0 pasteboard type - - {{82, 227}, {128, 128}} - - - YES - - 130560 - 33587200 - - NSImage - NSApplicationIcon - - 0 - 0 - 0 - NO - - NO - - - - 4370 - - - - 2304 - - - - 2322 - {{0, -6}, {284, 14}} - - - - - - - - - - - - - - 6 - - - - 284 - 1 - - - 33556485 - 0 - - - 6 - System - windowBackgroundColor - - - - - 6 - System - selectedTextBackgroundColor - - - - 6 - System - selectedTextColor - - - - - - - 1 - MCAwIDEAA - - - - - - 0 - - 6 - {575, 10000000} - {279, 0} - - - - {295, 228} - - - - - - {4, 5} - - 12582912 - - - - 2 - - - - -2147483392 - {{-22, 0}, {11, 315}} - - - 256 - - _doScroller: - 1 - 0.96923079999999995 - - - - -2147483392 - {{-100, -100}, {87, 18}} - - - 257 - - _doScroller: - 1 - 0.94565220000000005 - - - {295, 228} - - - 133648 - - - - AAAAAAAAAAAAAAAAAAAAAA - - - - 265 - {{166, 243}, {87, 14}} - - YES - - 70385217 - 4363264 - version - - - - - - - {295, 370} - - - {{0, 0}, {2560, 1578}} - {211, 265} - {465, 592} - YES - - - YES - - - SUUpdater - - - 85 - 85 - 85 - - 75628096 - 67110912 - Storlek - - - 3 - MC4zMzMzMzI5OQA - - - - - 337772096 - 67110912 - - - - - - - -∞ - - - +∞ - - #,##0.### - #,##0.### - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - wqA - YES - YES - YES - - - - - - - - - - - terminate: - - - - 139 - - - - hideOtherApplications: - - - - 146 - - - - hide: - - - - 152 - - - - unhideAllApplications: - - - - 153 - - - - delegate - - - - 342 - - - - redo: - - - - 404 - - - - cut: - - - - 406 - - - - paste: - - - - 410 - - - - selectAll: - - - - 413 - - - - undo: - - - - 418 - - - - copy: - - - - 419 - - - - delete: - - - - 422 - - - - performClose: - - - - 500 - - - - showHelp: - - - - 507 - - - - quickLookAction: - - - - 709 - - - - clearComplete: - - - - 723 - - - - startAgainOptimized: - - - - 727 - - - - viewSource: - - - - 736 - - - - openHomepage: - - - - 737 - - - - performZoom: - - - - 198 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - delegate - - - - 235 - - - - initialFirstResponder - - - - 452 - - - - tableView - - - - 242 - - - - filesController - - - - 274 - - - - showPrefs: - - - - 365 - - - - application - - - - 366 - - - - browseForFiles: - - - - 426 - - - - browseForFiles: - - - - 448 - - - - progressBar - - - - 465 - - - - startAgain: - - - - 592 - - - - startAgain: - - - - 594 - - - - statusBarLabel - - - - 700 - - - - credits - - - - 707 - - - - sizeColumn - - - - 755 - - - - savingsColumn - - - - 770 - - - - bestToolColumn - - - - 790 - - - - originalSizeColumn - - - - 807 - - - - value: arrangedObjects.fileName - - - - - - value: arrangedObjects.fileName - value - arrangedObjects.fileName - - NSRaisesForNotApplicableKeys - - - 2 - - - 477 - - - - value: arrangedObjects.byteSizeOptimized - - - - - - value: arrangedObjects.byteSizeOptimized - value - arrangedObjects.byteSizeOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 476 - - - - value: arrangedObjects.percentOptimized - - - - - - value: arrangedObjects.percentOptimized - value - arrangedObjects.percentOptimized - - NSRaisesForNotApplicableKeys - - - 2 - - - 474 - - - - selectionIndexes: selectedIndexes - - - - - - selectionIndexes: selectedIndexes - selectionIndexes - selectedIndexes - 2 - - - 711 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 451 - - - - nextKeyView - - - - 456 - - - - enabled: canAdd - - - - - - enabled: canAdd - enabled - canAdd - 2 - - - 447 - - - - value: arrangedObjects.statusImage - - - - - - value: arrangedObjects.statusImage - value - arrangedObjects.statusImage - - NSRaisesForNotApplicableKeys - - - 2 - - - 479 - - - - makeKeyAndOrderFront: - - - - 531 - - - - enabled: arrangedObjects.@count - - - - - - enabled: arrangedObjects.@count - enabled - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 732 - - - - checkForUpdates: - - - - 625 - - - - menu - - - - 746 - - - - value: version - - - - - - value: version - value - version - - NSRaisesForNotApplicableKeys - - - 2 - - - 650 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 681 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 670 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 674 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 677 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 685 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 689 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 693 - - - - hidden: arrangedObjects.@count - - - - - - hidden: arrangedObjects.@count - hidden - arrangedObjects.@count - - NSRaisesForNotApplicableKeys - - - 2 - - - 720 - - - - value: sizeColumn.hidden - - - - - - value: sizeColumn.hidden - value - sizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 769 - - - - value: savingsColumn.hidden - - - - - - value: savingsColumn.hidden - value - savingsColumn.hidden - - - - NSNegateBoolean - - 2 - - - 786 - - - - value: bestToolColumn.hidden - - - - - - value: bestToolColumn.hidden - value - bestToolColumn.hidden - - - - NSNegateBoolean - - 2 - - - 789 - - - - value: arrangedObjects.bestToolName - - - - - - value: arrangedObjects.bestToolName - value - arrangedObjects.bestToolName - - - - - - 2 - - - 777 - - - - value: originalSizeColumn.hidden - - - - - - value: originalSizeColumn.hidden - value - originalSizeColumn.hidden - - - - NSNegateBoolean - - 2 - - - 808 - - - - value: arrangedObjects.byteSize - - - - - - value: arrangedObjects.byteSize - value - arrangedObjects.byteSize - - - - - 2 - - - 800 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 21 - - - - - - Window - - - 2 - - - - - - - - - - - - - 428 - - - Progress - - - 29 - - - - - - - - - - - MainMenu - - - 19 - - - - - - - - 56 - - - - - - - - 57 - - - - - - - - - - - - - - - - - - - 131 - - - - - - - - 130 - - - - - 134 - - - - - 136 - - - - - 144 - - - - - 145 - - - - - 149 - - - - - 150 - - - - - 361 - - - - - 362 - - - - - 363 - - - - - 364 - - - - - 624 - - - - - 375 - - - - - - - - 376 - - - - - - - - - - - - - - - - - 377 - - - - - 378 - - - - - 384 - - - - - 392 - - - - - 398 - - - - - 399 - - - - - 400 - - - - - 402 - - - - - 429 - - - - - - - - 430 - - - - - - - - - - - - - 437 - - - - - 498 - - - - - 499 - - - - - 593 - - - - - 504 - - - - - - - - 505 - - - - - - - - - - - 506 - - - - - 230 - - - ImageOptim - - - 251 - - - Files - - - 526 - - - - - - About - - - 527 - - - - - - - - - - 528 - - - - - - - - 529 - - - - - - - - - - 530 - - - - - 562 - - - Shared User Defaults Controller - - - 623 - - - Updater - - - 636 - - - - - 643 - - - - - 644 - - - - - 645 - - - - - - - - 646 - - - - - 655 - - - - - - - - 656 - - - - - - - - - - - - - - - - 658 - - - - - 659 - - - - - 660 - - - - - 661 - - - - - 662 - - - - - 663 - - - - - 664 - - - - - 665 - - - - - 666 - - - - - 236 - - - - - - - - - Table Scroll View - - - 642 - - - - - 641 - - - - - 640 - - - - - 237 - - - - - - - - - - - Table - - - 462 - - - - - - - - 463 - - - - - 243 - - - - - - - - 639 - - - - - - - - 253 - - - Number Formatter - - - 239 - - - - - - - - 638 - - - - - - - - 254 - - - - - 238 - - - - - - - - 637 - - - - - 586 - - - - - - Again - - - 635 - - - - - 423 - - - - - - Add - - - 633 - - - - - 294 - - - - - - Status - - - 632 - - - - - 708 - - - - - 712 - - - Drop - - - 724 - - - - - 721 - - - - - 725 - - - - - 733 - - - - - 735 - - - - - 738 - - - - - 771 - - - - - - - - 772 - - - - - 792 - - - - - - - - 793 - - - - - - - - 794 - - - - - 795 - - - - - - - - 796 - - - - - - - - 801 - - - - - 24 - - - - - - - - - - - - - 197 - - - - - 92 - - - - - 23 - - - - - 5 - - - - - 809 - - - - - - - - 812 - - - - - 739 - - - - - - - - - Header context menu - - - 741 - - - - - 747 - - - - - 740 - - - - - 791 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{398, 1140}, {640, 239}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Lista över filer som ska optimeras - - - com.apple.InterfaceBuilder.CocoaPlugin - MyTableView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Filstorlek efter optimering - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - SavingsFormatter - - - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - LĂ€gg till nya filer eller mappar - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Optimeringsstatus - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{172, 411}, {293, 359}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - RevealButtonCell - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - - AccessibilityDescription - - AccessibilityDescription - - Status - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Dra bilder hit - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AccessibilityDescription - - AccessibilityDescription - - Filstorlek efter optimering - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 812 - - - - - DragDropImageView - NSView - - IBProjectSource - ./Classes/DragDropImageView.h - - - - FilesQueue - NSObject - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/FilesQueue.h - - - - ImageOptim - NSObject - - id - id - id - id - id - id - id - id - - - - browseForFiles: - id - - - clearComplete: - id - - - openHomepage: - id - - - quickLookAction: - id - - - showPrefs: - id - - - startAgain: - id - - - startAgainOptimized: - id - - - viewSource: - id - - - - NSTableColumn - NSTextView - NSArrayController - NSTableColumn - NSProgressIndicator - NSTableColumn - NSTableColumn - NSTextField - NSTableView - - - - bestToolColumn - NSTableColumn - - - credits - NSTextView - - - filesController - NSArrayController - - - originalSizeColumn - NSTableColumn - - - progressBar - NSProgressIndicator - - - savingsColumn - NSTableColumn - - - sizeColumn - NSTableColumn - - - statusBarLabel - NSTextField - - - tableView - NSTableView - - - - IBProjectSource - ./Classes/ImageOptim.h - - - - MyTableView - NSTableView - - delete: - id - - - delete: - - delete: - id - - - - IBProjectSource - ./Classes/MyTableView.h - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - RevealButtonCell - NSTextFieldCell - - IBProjectSource - ./Classes/RevealButtonCell.h - - - - SUUpdater - NSObject - - checkForUpdates: - id - - - checkForUpdates: - - checkForUpdates: - id - - - - delegate - id - - - delegate - - delegate - id - - - - IBProjectSource - ./Classes/SUUpdater.h - - - - SavingsFormatter - NSNumberFormatter - - IBProjectSource - ./Classes/SavingsFormatter.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - {8, 8} - {128, 128} - {11, 11} - {10, 3} - {10, 12} - - - diff --git a/imageoptim/sv.lproj/PrefsController.strings b/imageoptim/sv.lproj/PrefsController.strings new file mode 100644 index 00000000..77fe2c2e --- /dev/null +++ b/imageoptim/sv.lproj/PrefsController.strings @@ -0,0 +1,57 @@ +/* Window title */ +"5.title" = "ImageOptim InstĂ€llningar"; + +/* The first prefs tab (misc/general) */ +"167.label" = "AllmĂ€nt"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimeringshastighet"; + +/* Tab quality (for lossy minification) */ +"177.label" = "KvalitĂ©"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Vid sparande"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "BehĂ„ll filbehörigheter, attribut och hĂ„rda lĂ€nkar"; + +/* label in speed tab "Optimization level" */ +"818.title" = "OptimeringsnivĂ„"; + +/* "Fast" */ +"819.title" = "Snabb"; + +/* "Insane" */ +"820.title" = "Vansinnig"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: Ta bort alla valfria stycken"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "WebblĂ€sare krĂ€ver att gammastycken tas bort"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: Maxkvalitet"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: Ta bort EXIF-data och kommentarer frĂ„n filer"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "Metadata"; + +/* Header above list of tools to enable */ +"1107.title" = "Aktivera"; + + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF-kvalitĂ©"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Skapar mycket mindre filer men kan Ă€ndra dess utseende"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: Maxkvalitet"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "SĂ€tt pĂ„ lossy minifiering"; diff --git a/imageoptim/sv.lproj/PrefsController.xib b/imageoptim/sv.lproj/PrefsController.xib deleted file mode 100644 index d5d534cd..00000000 --- a/imageoptim/sv.lproj/PrefsController.xib +++ /dev/null @@ -1,3233 +0,0 @@ - - - - 1060 - 11D50 - 2182 - 1138.32 - 568.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 2182 - - - NSNumberFormatter - NSArrayController - NSButton - NSButtonCell - NSTextFieldCell - NSBox - NSTabView - NSSlider - NSSliderCell - NSCustomObject - NSTabViewItem - NSView - NSWindowTemplate - NSTextField - NSUserDefaultsController - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - PrefsController - - - FirstResponder - - - NSApplication - - - 15 - 2 - {{121, 589}, {653, 313}} - -1334312960 - ImageOptim InstĂ€llningar - NSWindow - - View - - - {653, 313} - {653, 313} - - - 256 - - - - 274 - {{13, 10}, {627, 297}} - - - - - - 256 - - - - 266 - - - - 274 - - - - 268 - {{15, 31}, {400, 18}} - - - YES - - -2080244224 - 0 - BehĂ„ll filbehörigheter, attribut och hĂ„rda lĂ€nkar - - LucidaGrande - 13 - 1044 - - - 1211912703 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 268 - {{15, 11}, {400, 18}} - - - YES - - 67239424 - 0 - Gör en backup av originalfilerna före sparande - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{2, 2}, {434, 58}} - - - - - {{159, 176}, {438, 75}} - - - {0, 0} - - 67239424 - 0 - Vid sparande - - LucidaGrande - 11 - 16 - - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 3 - 0 - 2 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 1 - YES - - 67239424 - 134217728 - - - - 1 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 10 - - - - 274 - - - - 264 - {{16, 34}, {400, 18}} - - - YES - - -2080244224 - 0 - Ta bort alla valfria stycken - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 264 - {{36, 14}, {385, 14}} - - - YES - - 67239424 - 4194304 - WebblĂ€sare krĂ€ver att gammastycken tas bort - - LucidaGrande - 11 - 3100 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - {{1, 1}, {436, 60}} - - - _NS:21 - - - {{159, 96}, {438, 76}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - PNG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 10 - - - - 274 - - - - 268 - {{16, 12}, {400, 18}} - - - YES - - -2080244224 - 0 - Ta bort EXIF-data och kommentarer frĂ„n filer - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {436, 38}} - - - _NS:21 - - - {{159, 38}, {438, 54}} - - - _NS:18 - {0, 0} - - 67239424 - 0 - JPEG - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - - - 274 - - - - 268 - {{16, 12}, {110, 18}} - - - YES - - -2080244224 - 0 - Gifsicle - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 171}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGOUT - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 151}, {110, 18}} - - - YES - - -2080244224 - 0 - PNGCrush - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 131}, {110, 18}} - - - YES - - -2080244224 - 0 - OptiPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 111}, {110, 18}} - - - YES - - -2080244224 - 0 - AdvPNG - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 82}, {110, 18}} - - - YES - - -2080244224 - 0 - JPEGOptim - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 62}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegtran - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{16, 42}, {110, 18}} - - - YES - - -2080244224 - 0 - Jpegrescan - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{1, 1}, {138, 197}} - - - _NS:11 - - - {{10, 38}, {140, 213}} - - - _NS:9 - {0, 0} - - 67239424 - 0 - Aktivera - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{10, 33}, {607, 251}} - - - - AllmĂ€nt - - - - - - - 256 - - - - 268 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - Helvetica - 12 - 16 - - - 3 - 0.0 - 3 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - Optimeringstyp - - - - - - - - - 268 - {{144, 166}, {64, 11}} - - - YES - - 67239424 - 272629760 - Enkel - - LucidaGrande - 9 - 3614 - - - - - - - - - 268 - {{308, 166}, {69, 11}} - - - YES - - 67239424 - 71303168 - Extrem - - - - - - - - - 268 - {{252, 166}, {89, 11}} - - - YES - - 67239424 - 138412032 - Galen - - - - - - - - - 268 - {{191, 152}, {70, 25}} - - - YES - - 67239424 - 138412032 - LĂ€ngsta matchning - - - - - - - - - -2147483384 - {{145, 56}, {277, 18}} - - - YES - - 67239424 - 0 - Prova med olika filter - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 289 - {{575, 5}, {21, 23}} - - - 6 - YES - - 67239424 - 134217728 - - - - 6 - -2038284033 - 33 - - - - - - 200 - 25 - - - - - 264 - {{145, 130}, {488, 18}} - - - YES - - -2080244224 - 0 - Avbryt om det tar för lĂ„ng tid - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - PNGOUT - - - - - - - 256 - - - - 268 - {{145, 130}, {488, 18}} - - - YES - - 67239424 - 16777216 - SammanflĂ€ta bilder (progressivt) - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 268 - {{2, 162}, {140, 51}} - - - YES - - 67239424 - 71303168 - OptimeringsnivĂ„ - - - - - - - - - 268 - {{164, 111}, {470, 13}} - - - YES - - 67239424 - 272629760 - SammanflĂ€tade bilder Ă€r vanligtvis större - - LucidaGrande - 10 - 2843 - - - - - - - - - 266 - - - - 274 - - - - 266 - {{2, 23}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 9 - 4 - 9 - 0.0 - 6 - 0 - YES - NO - - - - - 268 - {{1, 4}, {106, 11}} - - - YES - - 67239424 - 272629760 - 24 försök - - - - - - - - - 265 - {{134, 4}, {100, 11}} - - - YES - - 67239424 - 71303168 - 240 försök - - - - - - - - {243, 62} - - - - - {{143, 162}, {243, 62}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 4 - YES - - 67239424 - 134217728 - - - - 4 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - OptiPNG - - - - - - - 256 - - - - 264 - {{145, 185}, {231, 25}} - - - YES - - 67239424 - 0 - - - - - - 4 - 1 - 4 - 0.0 - 4 - 0 - YES - NO - - - - - 268 - {{2, 166}, {140, 47}} - - - YES - - 67239424 - 71303168 - OptimeringsnivĂ„ - - - - - - - - - 268 - {{144, 166}, {79, 11}} - - - YES - - 67239424 - 272629760 - Snabb - - - - - - - - - 268 - {{301, 166}, {76, 11}} - - - YES - - 67239424 - 71303168 - Vansinnig - - - - - - - - - 268 - {{189, 166}, {75, 11}} - - - YES - - 67239424 - 138412032 - Normal - - - - - - - - - 268 - {{263, 166}, {66, 11}} - - - YES - - 67239424 - 138412032 - Extra - - - - - - - - - 289 - {{575, 5}, {21, 23}} - - - 3 - YES - - 67239424 - 134217728 - - - - 3 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - AdvPNG - - - - - - - 256 - - - - 268 - {{2, 196}, {140, 17}} - - - YES - - 67239424 - 71303168 - Maxkvalitet - - - - - - - - - 265 - {{458, 198}, {45, 11}} - - - YES - - 67239424 - 272629760 - - 2 - 1 - YES - YES - 1 - AQAAAAAAAAAAAAAAAAAAAA - - - - - - - 0% - - - . - - wqA - -0% - 0% - - - 0% - -0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - . - wqA - NO - YES - YES - - - - - - - - - 266 - - - - 274 - - - - 266 - {{1, 21}, {310, 25}} - - - YES - - 67501824 - 0 - - - - - - 100 - 80 - 90 - 0.0 - 21 - 0 - YES - NO - - - - - 268 - {{0, 2}, {49, 11}} - - - YES - - 67239424 - 272629760 - 80% - - - - - - - - - 265 - {{249, 2}, {63, 11}} - - - YES - - 67239424 - 71303168 - 100% - - - - - - - - - 269 - {{123, 2}, {67, 11}} - - - YES - - 67239424 - 138412032 - 90% - - - - - - - - {315, 60} - - - - - {{144, 164}, {315, 60}} - - - {0, 0} - - 67239424 - 0 - - - - - 3 - MCAwLjgwMDAwMDAxAA - - - - 0 - 3 - 0 - NO - - - - 289 - {{575, 5}, {21, 23}} - - - 2 - YES - - 67239424 - 134217728 - - - - 2 - -2038284033 - 33 - - - - - - 200 - 25 - - - - {{10, 33}, {607, 251}} - - - JPEGOptim - - - - - - - 0 - YES - YES - - - - - - {653, 313} - - - {{0, 0}, {1680, 1028}} - {653, 335} - {653, 335} - Prefs - YES - - - YES - - - - name - - YES - YES - - YES - YES - YES - YES - YES - - - - - - - chunksController - - - - 611 - - - - window - - - - 688 - - - - showHelp: - - - - 690 - - - - showHelp: - - - - 692 - - - - showHelp: - - - - 691 - - - - showHelp: - - - - 694 - - - - showHelp: - - - - 689 - - - - delegate - - - - 162 - - - - value: values.PreservePermissions - - - - - - value: values.PreservePermissions - value - values.PreservePermissions - 2 - - - 302 - - - - value: values.BackupFiles - - - - - - value: values.BackupFiles - value - values.BackupFiles - 2 - - - 695 - - - - enabled: values.JpegOptimEnabled - - - - - - enabled: values.JpegOptimEnabled - enabled - values.JpegOptimEnabled - 2 - - - 433 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 317 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 455 - - - - value: values.OptiPng.Interlace - - - - - - value: values.OptiPng.Interlace - value - values.OptiPng.Interlace - 2 - - - 340 - - - - enabled: values.OptiPngEnabled - - - - - - enabled: values.OptiPngEnabled - enabled - values.OptiPngEnabled - 2 - - - 454 - - - - value: values.OptiPngLevel - - - - - - value: values.OptiPngLevel - value - values.OptiPngLevel - 2 - - - 347 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 669 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 675 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 681 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 684 - - - - value: values.JpegOptimMaxQuality - - - - - - value: values.JpegOptimMaxQuality - value - values.JpegOptimMaxQuality - 2 - - - 377 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 672 - - - - textColor: values.JpegOptimEnabled - - - - - - textColor: values.JpegOptimEnabled - textColor - values.JpegOptimEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 678 - - - - value: values.AdvPngLevel - - - - - - value: values.AdvPngLevel - value - values.AdvPngLevel - 2 - - - 346 - - - - enabled: values.AdvPngEnabled - - - - - - enabled: values.AdvPngEnabled - enabled - values.AdvPngEnabled - 2 - - - 459 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 657 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 666 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 660 - - - - textColor: values.AdvPngEnabled - - - - - - textColor: values.AdvPngEnabled - textColor - values.AdvPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 663 - - - - value: values.PngOutRemoveChunks - - - - - - value: values.PngOutRemoveChunks - value - values.PngOutRemoveChunks - 2 - - - 359 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 460 - - - - value: values.PngOutLevel - - - - - - value: values.PngOutLevel - value - values.PngOutLevel - 2 - - - 353 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - 2 - - - 462 - - - - value: values.PngOut.TryFilters - - - - - - value: values.PngOut.TryFilters - value - values.PngOut.TryFilters - 2 - - - 357 - - - - textColor: values.OptiPngEnabled - - - - - - textColor: values.OptiPngEnabled - textColor - values.OptiPngEnabled - - NSValueTransformerName - DisabledColor - - 2 - - - 654 - - - - editable: values.PngCrushEnabled - - - - - - editable: values.PngCrushEnabled - editable - values.PngCrushEnabled - 2 - - - 531 - - - - contentArray: values.PngCrushChunks - - - - - - contentArray: values.PngCrushChunks - contentArray - values.PngCrushChunks - - - - - - 2 - - - 556 - - - - value: values.JpegTranStripAll - - - - - - value: values.JpegTranStripAll - value - values.JpegTranStripAll - 2 - - - 920 - - - - enabled: values.PngOutEnabled - - - - - - enabled: values.PngOutEnabled - enabled - values.PngOutEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 956 - - - - value: values.PngOutInterrupt - - - - - - value: values.PngOutInterrupt - value - values.PngOutInterrupt - - - - - 2 - - - 952 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1105 - - - - value: values.PngOutEnabled - - - - - - value: values.PngOutEnabled - value - values.PngOutEnabled - 2 - - - 1101 - - - - value: values.PngCrushEnabled - - - - - - value: values.PngCrushEnabled - value - values.PngCrushEnabled - 2 - - - 1102 - - - - value: values.OptiPngEnabled - - - - - - value: values.OptiPngEnabled - value - values.OptiPngEnabled - 2 - - - 1104 - - - - value: values.AdvPngEnabled - - - - - - value: values.AdvPngEnabled - value - values.AdvPngEnabled - 2 - - - 1100 - - - - value: values.JpegOptimEnabled - - - - - - value: values.JpegOptimEnabled - value - values.JpegOptimEnabled - 2 - - - 1099 - - - - value: values.JpegTranEnabled - - - - - - value: values.JpegTranEnabled - value - values.JpegTranEnabled - 2 - - - 1103 - - - - value: values.GifsicleEnabled - - - - - - value: values.GifsicleEnabled - value - values.GifsicleEnabled - 2 - - - 1106 - - - - value: values.JpegRescanEnabled - - - - - - value: values.JpegRescanEnabled - value - values.JpegRescanEnabled - 2 - - - 1113 - - - - enabled: values.JpegTranEnabled - - - - - - enabled: values.JpegTranEnabled - enabled - values.JpegTranEnabled - - NSRaisesForNotApplicableKeys - - - 2 - - - 1116 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 5 - - - - - - Window - - - 6 - - - - - - - - 300 - - - Shared Defaults - - - 503 - - - PngCrushChunks - - - 166 - - - - - - - - - - - - 177 - - - - - - - - 178 - - - - - - - - - - - 296 - - - - - - - - 878 - - - - - 291 - - - - - - - - - - - 242 - - - - - - - - 877 - - - - - 231 - - - - - - - - 876 - - - - - 230 - - - - - - - - 875 - - - - - 188 - - - - - - - - 874 - - - - - 232 - - - - - - - - 872 - - - - - - - - 378 - - - - - 189 - - - - - - - - 868 - - - - - 171 - - - - - - - - 172 - - - - - - - - - - - - 294 - - - - - - - - 835 - - - - - 289 - - - - - - - - - - 241 - - - - - - - - 834 - - - - - 229 - - - - - - - - 833 - - - - - 227 - - - - - - - - 832 - - - - - 275 - - - - - - - - 831 - - - - - 228 - - - - - - - - 829 - - - - - 226 - - - - - - - - 828 - - - - - 168 - - - - - - - - 170 - - - - - - - - - - - - - - 256 - - - - - - - - 822 - - - - - 293 - - - - - - - - 823 - - - - - 255 - - - - - - - - 821 - - - - - 252 - - - - - - - - 820 - - - - - 251 - - - - - - - - 819 - - - - - 250 - - - - - - - - 818 - - - - - 249 - - - - - - - - 817 - - - - - 175 - - - - - - - - 176 - - - - - - - - - - - - - - - - 274 - - - - - - - - 862 - - - - - 945 - - - - - - - - 946 - - - - - 288 - - - - - - - - 863 - - - - - 272 - - - - - - - - 861 - - - - - 271 - - - - - - - - 860 - - - - - 269 - - - - - - - - 858 - - - - - 266 - - - - - - - - 857 - - - - - 265 - - - - - - - - 856 - - - - - 264 - - - - - - - - 855 - - - - - 167 - - - - - - - - 169 - - - - - - - - - - - - 1107 - - - - - - - - - - - - - - - 1085 - - - - - - - - 1098 - - - - - 1086 - - - - - - - - 1097 - - - - - 1087 - - - - - - - - 1096 - - - - - 1088 - - - - - - - - 1095 - - - - - 1089 - - - - - - - - 1094 - - - - - 1090 - - - - - - - - 1093 - - - - - 1091 - - - - - - - - 1092 - - - - - 1044 - - - - - - - - 890 - - - - - - - - 911 - - - - - 1043 - - - - - - - - - 496 - - - - - - - - 865 - - - - - 263 - - - - - - - - 854 - - - - - 280 - - - - - - - - - 185 - - - - - - - - 805 - - - - - 184 - - - - - - - - 804 - - - - - 297 - - - - - - - - 812 - - - - - 1110 - - - - - - - - 1111 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - InitialTabViewItem - - InitialTabViewItem - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{312, 965}, {689, 365}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 1116 - - - - - FirstResponder - - : - id - - - : - - : - id - - - - IBUserSource - - - - - PrefsController - NSWindowController - - id - id - id - - - - addGammaChunks: - id - - - browseForExecutable: - id - - - showHelp: - id - - - - NSArrayController - NSSlider - - - - chunksController - NSArrayController - - - tasksSlider - NSSlider - - - - IBProjectSource - ./Classes/PrefsController.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - YES - 3 - - NSSwitch - {15, 15} - - - diff --git a/imageoptim/tr.lproj/Credits.html b/imageoptim/tr.lproj/Credits.html new file mode 100644 index 00000000..f2fbd66f --- /dev/null +++ b/imageoptim/tr.lproj/Credits.html @@ -0,0 +1,28 @@ +
    +

    ImageOptim Kornel LesiƄski ve katkısı bulunan 3. parti yazılımlar için bir GUI'dir:

    + +

    ImageOptim yeniden dağıtılabilir ve ĂŒzerinde değißiklik yapılabilir, ancak GNU özgĂŒr belgeleme sĂŒrĂŒm 2 veya ĂŒstĂŒ lisansıyla. Paketli PNGOUT GPL kapsamında değildir ve Ardfry Imaging, LLC izniyle dahil edilmißtir.

    +
    diff --git a/imageoptim/tr.lproj/Help/index.html b/imageoptim/tr.lproj/Help/index.html new file mode 100644 index 00000000..372f97d3 --- /dev/null +++ b/imageoptim/tr.lproj/Help/index.html @@ -0,0 +1,75 @@ + + + + +Codestin Search App + + + + + + +

    ImageOptim

    + +

    Kullanım

    + +
      +
    1. PNG veya JPEG dosyaları veya klasörlerini ImageOptim penceresinin ana tablo görĂŒntĂŒsĂŒne sĂŒrĂŒkle ve bırak.
    2. + +
    3. Bitirene kadar bekle.
    4. + +
    5. Kazanç! (kĂŒĂ§ĂŒk dosyalardan)
    6. +
    +

    Dosyaları ImageOptim'in Dock simgesine de sĂŒrĂŒkleyebilirsiniz.

    + +

    Seçenekleri nasıl değißtireceğini Ă¶ÄŸren.

    + +

    Dosya tablosundaki simgeler

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Yeßil Seçim İßaretiResim baßarıyla optimize edildi.
    Yeßil XHerßey yolunda, ancak resim daha fazla optimize edilemiyor.
    Gri yıldızBu dosyanın optimizasyonu devam ediyor.
    Gri noktacıklarDiğer dosyalar bittikten sonra optimize edilmesi için sıraya alındı.
    Turuncu ĂŒnlem ißaretiOptimizasyon sırasında hata olußtu. Hata açıklamasını Console.app yazılımıyla görebilirsiniz.
    +

    Nasıl ißler

    + +

    ImageOptim ßu yazılımları çalıßtıran bir arayĂŒzdĂŒr (GUI):

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • ve tercihli olarak PNGOUT.
    • +
    +

    ImageOptim bunları çalıßtırır ve otomatik olarak en kĂŒĂ§ĂŒk dosyayı seçer.

    + + diff --git a/imageoptim/tr.lproj/Help/prefs.html b/imageoptim/tr.lproj/Help/prefs.html new file mode 100644 index 00000000..eb12bc5e --- /dev/null +++ b/imageoptim/tr.lproj/Help/prefs.html @@ -0,0 +1,142 @@ + + + + +Codestin Search App + + + + + + + +

    + ImageOptim Preferences +

    +

    + « Back to index +

    +

    + General preferences +

    +
    +
    + Preserve file permissions, attributes and hardlinks +
    +
    +

    + Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. +

    +

    + It's slightly faster not to preserve permissions. +

    +
    +
    + Strip PNG metadata (gamma, color profiles, optional chunks) +
    +
    +

    + PNG files can have different brightness and saturation in different browsers, because not all browsers support gamma correction and color profiles features equally. Removal of this information makes PNG color more consistent across browsers and reduces file size. +

    +

    + Other invisible information is removed as well, such as DPI and comments. +

    +
    +
    + Strip JPEG metadata (EXIF, color profiles, GPS, rotation, etc.) +
    +
    +

    + Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. +

    +

    + Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not. +

    +
    +
    +

    + Tools +

    +

    + Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression). +

    +

    + Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files). +

    +
    +

    + JPEGOptim +

    +
    +
    + Maximum quality +
    +
    +

    + If set to 100%, optimization will be lossless. +

    +

    + Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting. +

    +
    +
    +
    +
    +

    + PNGOUT +

    +
    +
    + Optimization type +
    +
    +

    + PNGOUT is very effective, but very slow. Use lower level if you're impatient. +

    +
    +
    + Interrupt if takes too long +
    +
    +

    + PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute. +

    +
    +
    +
    +
    +

    + OxiPNG +

    +
    +
    + Optimization level +
    +
    +

    + Number of different setting combinations tested. It rarely makes sense to try them all. +

    +
    +
    + Make images interlaced (progressive) +
    +
    +

    + Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient. +

    +

    + This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files. +

    +
    +
    +
    +
    +

    + Gifsicle +

    +

    + For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically). +

    +
    + + diff --git a/imageoptim/tr.lproj/ImageOptim.strings b/imageoptim/tr.lproj/ImageOptim.strings new file mode 100644 index 00000000..9b677386 --- /dev/null +++ b/imageoptim/tr.lproj/ImageOptim.strings @@ -0,0 +1,192 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Hepsini Öne Getir"; + +/* Menu Item "Window" */ +"19.title" = "Pencere"; + +/* Menu Item "Minimize" */ +"23.title" = "KĂŒĂ§ĂŒlt"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Pencere"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "AnaMenĂŒ"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Servisler"; + +/* Menu Item "Services" */ +"131.title" = "Servisler"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ImageOptim'i Gizle"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ImageOptim'den Çık"; + +/* Menu Item "Hide Others" */ +"145.title" = "Diğerlerini Gizle"; + +/* Menu Item "Show All" */ +"150.title" = "Hepsini Göster"; + +/* Menu Item "Zoom" */ +"197.title" = "Yakınlaßtır"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Optimize edilecekler listesi"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Dosya"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Boyut"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Optimizasyon sonrası boyut"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Optimizasyon sonrası boyut"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Kazanılan"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Durum"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "ImageOptim Hakkında"; + +/* Menu Item "Preferences
" */ +"363.title" = "Ayarlar
"; + +/* Menu Item "Edit" */ +"375.title" = "DĂŒzen"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "DĂŒzen"; + +/* Menu Item "Select All" */ +"377.title" = "Hepsini Seç"; + +/* Menu Item "Undo" */ +"378.title" = "Geri Al"; + +/* Menu Item "Redo" */ +"384.title" = "Yinele"; + +/* Menu Item "Cut" */ +"398.title" = "Kes"; + +/* Menu Item "Copy" */ +"399.title" = "Kopyala"; + +/* Menu Item "Paste" */ +"400.title" = "Yapıßtır"; + +/* Menu Item "Delete" */ +"402.title" = "Sil"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Yeni dosya veya klasör ekle"; + +/* Menu Item "File" */ +"429.title" = "Dosya"; + +/* Top-level Main Menu "File" */ +"430.title" = "Dosya"; + +/* Menu Item "Add Files
" */ +"437.title" = "Dosya Ekle
"; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "Optimizasyon durumu"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "Optimizasyon durumu"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Kapat"; + +/* Menu Item "Help" */ +"504.title" = "Yardım"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Yardım"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim Yardım"; + +/* Window Title "About ImageOptim" */ +"526.title" = "ImageOptim Hakkında"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Tekrar Optimize Et"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "GĂŒncelleme Sorgula
"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "Resim dosyalarını ĂŒstteki alana sĂŒrĂŒkle ve bırak"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Ekle"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Optimizasyonları yinele"; + +/* Button "Again" */ +"635.title" = "Tekrar"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "Durum"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "sĂŒrĂŒm"; + +/* TextFieldCell "version" */ +"646.title" = "sĂŒrĂŒm"; + +/* Menu Item "Tools" */ +"655.title" = "Araçlar"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Araçlar"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Resimleri buraya sĂŒrĂŒkle"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Silme Tamamlandı"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Optimizasyon Optimize Edildi"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim Web Sitesi"; + +/* Menu Item "View Source" */ +"735.title" = "Kaynağı GörĂŒntĂŒle"; + +/* Menu Item "Optimized Size" */ +"740.title" = "Optimize Boyut"; + +/* Menu Item "Savings" */ +"741.title" = "Kazanım"; + +/* Menu Item "Original Size" */ +"791.title" = "Orijinal Boyut"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "Orijinal Boyut"; + +/* Menu Item "Show Columns" */ +"809.title" = "SĂŒtunları Göster"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "Kalite: 100%"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "Kopyala Data URL"; + diff --git a/imageoptim/tr.lproj/Localizable.strings b/imageoptim/tr.lproj/Localizable.strings new file mode 100644 index 00000000..5bdf348b --- /dev/null +++ b/imageoptim/tr.lproj/Localizable.strings @@ -0,0 +1,43 @@ +/* undo command name */ +"Add" = "Ekle"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Gerekli tĂŒm araçlar Tercihlerde devre dıßı bırakılmıßtır"; + +/* tooltip, generic loading error */ +"Can't open the file" = "Dosya hafızaya yerleßtirilemiyor"; + +/* undo command name */ +"Cut" = "Kes"; + +/* tooltip */ +"File cannot be optimized any further" = "Dosya bundan fazla optimize edilemez"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Dosya ne PNG, GIF, ne de JPEG"; + +/* tooltip */ +"Inspecting file" = "Dosya inceleniyor"; + +/* newly added to the queue */ +"New file" = "Yeni dosya"; + +/* tooltip */ +"Optimized file could not be saved" = "Optimize edilmiß dosya kaydedilemedi"; + +/* tooltip */ +"Optimized successfully with %@" = "%@ optimizasyonu baßarıyla tamamlandı"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "%2$@ ĂŒzerinden %1$@ tasarruf edildi. Toplamda %3$@ (dosya baßına %4$@ kadar)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "%2$@ ĂŒzerinden %1$@ tasarruf edildi. Dosya baßına ortalama %3$@ (%4$@ kadar)"; + +/* command name, tooltip */ +"Started %@" = "%@ ißlemi baßladı"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Daha fazla optimizasyon için bekliyor"; + diff --git a/imageoptim/tr.lproj/PrefsController.strings b/imageoptim/tr.lproj/PrefsController.strings new file mode 100644 index 00000000..de0127cd --- /dev/null +++ b/imageoptim/tr.lproj/PrefsController.strings @@ -0,0 +1,42 @@ +/* Window title */ +"5.title" = "ImageOptim Tercihleri"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Genel"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Optimizasyon seviyesi"; + +/* Tab quality (for lossy minification) */ +"177.label" = "Kalite"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Dosya kayıt tercihi"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "Dosya izinlerini, özelliklerini ve sabit bağlantıları koru"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Optimizasyon seviyesi"; + +/* "Fast" */ +"819.title" = "Hızlı"; + +/* "Insane" */ +"820.title" = "Çılgın"; + +/* "Extra" */ +"822.title" = "Ekstra"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Web tarayıcıları gamma fazlalıklarının kaldırılmasını gerektirir"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: kalite"; + +/* Header above list of tools to enable */ +"1107.title" = "Açık"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: kalite"; + diff --git a/imageoptim/uk.lproj/Help/index.html b/imageoptim/uk.lproj/Help/index.html new file mode 100644 index 00000000..6bdf2878 --- /dev/null +++ b/imageoptim/uk.lproj/Help/index.html @@ -0,0 +1,60 @@ + + + + +Codestin Search App + + + + + + + +

    ImageOptim

    +

    ĐŻĐș ĐșĐŸŃ€ĐžŃŃ‚ŃƒĐČатося ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐŸŃŽ

    +
      +
    1. ĐŸĐ”Ń€Đ”ĐŒŃ–ŃŃ‚Ń–Ń‚ŃŒ PNG Đ°Đ±ĐŸ JPEG фаĐčлО ĐœĐ° ĐłĐŸĐ»ĐŸĐČĐœĐ” ĐČіĐșĐœĐŸ ImageOptim. Во ĐŒĐŸĐ¶Đ”Ń‚Đ” ĐżĐ”Ń€Đ”ĐŒŃ–Ń‰Đ°Ń‚Đž ĐŸĐŽŃ€Đ°Đ·Ńƒ цілі папĐșĐž.
    2. +
    3. ЧДĐșато ĐœĐ° заĐșŃ–ĐœŃ‡Đ”ĐœĐœŃ
    4. +
    5. ĐŸŃ€ĐžĐ±ŃƒŃ‚ĐŸĐș! (Đ· ĐŒĐ”ĐœŃŒŃˆĐžŃ… фаĐčліĐČ)
    6. +
    +

    ЀаĐčлО Đ±ŃƒĐŽŃƒŃ‚ŃŒ ĐżĐ”Ń€Đ”Đ·Đ°ĐżĐžŃĐ°ĐœŃ– Đ· ĐŒĐ”ĐœŃˆĐžĐŒĐž за Ń€ĐŸĐ·ĐŒŃ–Ń€ĐŸĐŒ ĐČĐ”Ń€ŃŃ–ŃĐŒĐž. ĐžĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœŃ– ĐČДрсії Đ±ŃƒĐŽŃƒŃ‚ŃŒ ĐżĐ”Ń€Đ”ĐŒŃ–Ń‰Đ”ĐœŃ– ĐŽĐŸ ĐșĐŸŃˆĐžĐșу.

    +

    Во ĐŒĐŸĐ¶Đ”Ń‚Đ” таĐșĐŸĐ¶ ĐżĐ”Ń€Đ”Ń‚ŃĐłŃƒĐČато фаĐčлО ĐœĐ° ĐșĐœĐŸĐżĐșу ImageOptim ĐČ Dock.

    +

    Đ”Ń–Đ·ĐœĐ°ĐčŃ‚Đ”ŃŃ, яĐș Đ·ĐŒŃ–ĐœĐžŃ‚Đž ĐĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃ.

    +

    Đ—ĐœĐ°Ń‡ĐșĐž ĐČ Ń‚Đ°Đ±Đ»ĐžŃ†Ń– фаĐčліĐČ

    + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkĐ—ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ Đ±ŃƒĐ»ĐŸ ŃƒŃĐżŃ–ŃˆĐœĐŸ ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐŸ.
    Green XВсД ĐčŃˆĐ»ĐŸ ĐŽĐŸĐ±Ń€Đ”, алД Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ ĐœĐ” ĐŒĐŸĐ¶Đ” Đ±ŃƒŃ‚Đ” ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐŸ Ўалі.
    Gray starĐžĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń Ń†ŃŒĐŸĐłĐŸ фаĐčлу ĐČ ĐżŃ€ĐŸŃ†Đ”ŃŃ–.
    Gray dotsЀаĐčĐ» Đ·ĐœĐ°Ń…ĐŸĐŽĐžŃ‚ŃŒŃŃ ĐČ Ń‡Đ”Ń€Đ·Ń–, Ń‰ĐŸĐ± Đ±ŃƒŃ‚Đž ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐžĐŒ ĐżŃ–ŃĐ»Ń Ń–ĐœŃˆĐžŃ… фаĐčліĐČ.
    Orange exclamation markĐ‘ŃƒĐ»Đ° ĐżĐŸĐŒĐžĐ»Đșа піЮ час ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—. Во Đ·ĐœĐ°ĐčЎДтД ĐżĐŸŃŃĐœĐ”ĐœĐœŃ, Đ·Đ°ĐżŃƒŃŃ‚ĐžĐČшО Console.app.
    +

    ĐŻĐș цД працює

    +

    ImageOptim є front-end (GUI) ĐŽĐ»Ń цох ĐŽĐŸĐŽĐ°Ń‚ĐșіĐČ:

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • ĐŽĐŸĐŽĐ°Ń‚Đž PNGOUT.
    • +
    +

    ImageOptim запусĐșає їх і аĐČŃ‚ĐŸĐŒĐ°Ń‚ĐžŃ‡ĐœĐŸ ĐČОбОрає ĐœĐ°ĐčĐŒĐ”ĐœŃˆĐžĐč фаĐčĐ».

    + + diff --git a/imageoptim/uk.lproj/Help/prefs.html b/imageoptim/uk.lproj/Help/prefs.html new file mode 100644 index 00000000..b128de27 --- /dev/null +++ b/imageoptim/uk.lproj/Help/prefs.html @@ -0,0 +1,78 @@ + + + + +Codestin Search App + + + + + + + +

    ĐĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃ ImageOptim

    +

    « ĐŸĐŸĐČĐ”Ń€ĐœŃƒŃ‚ĐžŃŃ ĐŽĐŸ ĐżĐŸŃ‡Đ°Ń‚Đșу

    +

    Đ§Ń–Đ»ŃŒĐœŃ– ĐœĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃ

    +
    +
    ЗбДрДгтО праĐČа ĐŽĐŸŃŃ‚ŃƒĐżŃƒ ĐŽĐŸ фаĐčліĐČ, Đ°Ń‚Ń€ĐžĐ±ŃƒŃ‚Đž та Đ¶ĐŸŃ€ŃŃ‚Đșі ĐżĐŸŃĐžĐ»Đ°ĐœĐœŃ
    +
    +

    Đ—Đ°ĐŒŃ–ŃŃ‚ŃŒ Ń‚ĐŸĐłĐŸ, Ń‰ĐŸĐ± ĐČОЎалОтО староĐč фаĐčĐ», запОсатО ĐœĐŸĐČĐžĐč Đ· Ń‚ĐžĐŒ жД Ń–ĐŒ'ŃĐŒ, ĐżŃ€ĐŸŃŃ‚ĐŸ Đ·Đ°ĐŒŃ–ĐœŃŽŃŽŃ‡Đž ĐČĐŒŃ–ŃŃ‚ ŃŃ‚Đ°Ń€ĐŸĐłĐŸ фаĐčлу. ĐŠĐ” ĐłĐ°Ń€Đ°ĐœŃ‚ŃƒŃ”, Ń‰ĐŸ ĐČсі Đ¶ĐŸŃ€ŃŃ‚Đșі ĐżĐŸŃĐžĐ»Đ°ĐœĐœŃ, псДĐČĐŽĐŸĐœŃ–ĐŒĐž, ĐČĐ»Đ°ŃĐœĐžĐș фаĐčлу, праĐČа ĐŽĐŸŃŃ‚ŃƒĐżŃƒ, Ń€ĐŸĐ·ŃˆĐžŃ€Đ”ĐœŃ– Đ°Ń‚Ń€ĐžĐ±ŃƒŃ‚Đž фаĐčлу Đ·Đ°Đ»ĐžŃˆĐ°Ń‚ŃŒŃŃ ĐșĐŸĐ»ĐžŃˆĐœŃ–ĐŒĐž.

    +

    Đ—ĐœĐ°Ń‡ĐœĐŸ шĐČОЎшД ĐœĐ” сбДрігатО праĐČа ĐŽĐŸŃŃ‚ŃƒĐżŃƒ

    +
    +
    ХтДртО ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ– PNG (Ò‘Đ°ĐŒĐŒĐ°, ĐșĐŸĐ»Ń–Ń€ĐœŃ– ĐżŃ€ĐŸŃ„Ń–Đ»Ń–, та Ń–ĐœŃˆĐ”)
    +
    +

    PNG фаĐčлО ĐŒĐŸĐ¶ŃƒŃ‚ŃŒ ĐŒĐ°Ń‚Đž Ń€Ń–Đ·ĐœŃƒ ясĐșраĐČість і ĐœĐ°ŃĐžŃ‡Đ”ĐœŃ–ŃŃ‚ŃŒ ĐČ Ń€Ń–Đ·ĐœĐžŃ… Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Đ°Ń…, таĐș яĐș ĐœĐ” ĐČсі Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Đž ĐżŃ–ĐŽŃ‚Ń€ĐžĐŒŃƒŃŽŃ‚ŃŒ Ò‘Đ°ĐŒĐŒĐ°-ĐșĐŸŃ€Đ”Đșції та ĐșĐŸĐ»Ń–Ń€ĐœŃ– ĐżŃ€ĐŸŃ„Ń–Đ»Ń– ĐČ Ń€Ń–ĐČĐœŃ–Đč ĐŒŃ–Ń€Ń–. Đ’ĐžĐŽĐ°Đ»Đ”ĐœĐœŃ цієї Ń–ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–Ń— Ń€ĐŸĐ±ĐžŃ‚ŃŒ PNG ĐșĐŸĐ»Ń–Ń€ Đ±Ń–Đ»ŃŒŃˆ ĐżĐŸŃĐ»Ń–ĐŽĐŸĐČĐœĐžĐŒ у ĐČсіх Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Đ°Ń… і Đ·ĐŒĐ”ĐœŃˆŃƒŃ” Ń€ĐŸĐ·ĐŒŃ–Ń€ фаĐčлу.

    +

    Đ†ĐœŃˆĐ° ĐœĐ”ĐČĐžĐŽĐžĐŒĐ° Ń–ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–Ń була ĐČĐžĐŽĐ°Đ»Đ”ĐœĐ°, і таĐșĐŸĐ¶, ĐœĐ°ĐżŃ€ĐžĐșлаЎ, DPI та ĐșĐŸĐŒĐ”ĐœŃ‚Đ°Ń€Ń–.

    +
    +
    ХтДртО JPEG ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ– (EXIF, ĐșĐŸĐ»Ń–Ń€ĐœŃ– ĐżŃ€ĐŸŃ„Ń–Đ»Ń–, GPS, ĐŸĐ±Đ”Ń€Ń‚Đ°ĐœĐœŃ, та Ń–Đœ.)
    +
    +

    Đ’ĐžĐŽĐ°Đ»ŃŃ” ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœŃ– Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ, таĐșі яĐș ĐșĐŸĐ»Ń–Ń€ ĐżŃ€ĐŸŃ„Ń–Đ»ŃŽ, час Đ”ĐșŃĐżĐŸĐ·ĐžŃ†Ń–Ń—, ĐșĐŸĐŸŃ€ĐŽĐžĐœĐ°Ń‚Đž GPS, ĐŒĐŸĐŽĐ”Đ»ŃŒ ĐșĐ°ĐŒĐ”Ń€Đž і ĐœĐ°Đ·ĐČа ĐżŃ€ĐŸĐłŃ€Đ°ĐŒĐœĐŸĐłĐŸ Đ·Đ°Đ±Đ”Đ·ĐżĐ”Ń‡Đ”ĐœĐœŃ, ĐČĐžĐșĐŸŃ€ĐžŃŃ‚ĐŸĐČуĐČĐ°ĐœĐŸĐłĐŸ ĐŽĐ»Ń стĐČĐŸŃ€Đ”ĐœĐœŃ фаĐčлу.

    +

    Đ’Đ±ŃƒĐŽĐŸĐČĐ°ĐœĐ° Ń–ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–Ń ĐżŃ€ĐŸ аĐČŃ‚ĐŸŃ€ŃŃŒĐșі праĐČа таĐșĐŸĐ¶ ĐČĐžĐŽĐ°Đ»ŃŃ”Ń‚ŃŒŃŃ. БуЮь ласĐșа, Đ·ĐČĐ”Ń€ĐœŃ–Ń‚ŃŒ уĐČагу, Ń‰ĐŸ ĐČ Ń†Ń–Đ»ĐŸĐŒŃƒ Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ Đ·Đ°Ń…ĐžŃ‰Đ”ĐœŃ– заĐșĐŸĐœĐŸĐŒ ĐżŃ€ĐŸ аĐČŃ‚ĐŸŃ€ŃŃŒĐșĐ” праĐČĐŸ ĐœĐ”Đ·Đ°Đ»Đ”Đ¶ĐœĐŸ ĐČіЮ Ń‚ĐŸĐłĐŸ, чо ĐŒŃ–ŃŃ‚ŃŃ‚ŃŒ ĐČĐŸĐœĐž таĐșі ĐœĐ”ĐČĐžĐŽĐžĐŒŃ– ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœŃ– чо ĐœŃ–.

    +
    +
    +

    Đ†ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Đž

    +

    Zopfli та PNGOUT ЎужД Ń…ĐŸŃ€ĐŸŃˆŃ– ĐșĐŸĐŒĐżŃ€Đ”ŃĐŸŃ€Đž PNG, алД ЎужД ĐżĐŸĐČŃ–Đ»ŃŒĐœŃ–. ВіЮĐșлючОтО їх, яĐșŃ‰ĐŸ ĐČĐ°ĐŒ ĐżĐŸŃ‚Ń€Ń–Đ±ĐœĐŸ шĐČОЎĐșĐŸ ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ŃƒĐČато PNG фаĐčлО (Đ·Đ°Đ»ĐžŃˆŃ‚Đ” Ń‚Ń–Đ»ŃŒĐșĐž AdvPNG ĐŽĐ»Ń ĐœĐ°ĐčшĐČĐžĐŽŃˆĐŸĐłĐŸ, алД ĐČсД ĐŸĐŽĐœĐŸ яĐșŃ–ŃĐœĐŸĐłĐŸ ŃŃ‚ĐžŃĐœĐ”ĐœĐœŃ).

    +

    Zopfli та OptiPNG ĐŸŃ‡ĐžŃŃ‚ŃŃ‚ŃŒ Đ·ĐœĐ°Ń‡Đ”ĐœĐœŃ RGB ĐżŃ€ĐŸĐ·ĐŸŃ€ĐžŃ… піĐșсДліĐČ (ĐČŃ–ĐŽĐŸĐŒĐžĐč яĐș "Đ±Ń€ŃƒĐŽĐœĐč Đ°Đ»ŃŒŃ„Đ°"). ВіЮĐșлючОтО ці ĐŽĐČа Ń–ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Đž, яĐșŃ‰ĐŸ ĐČĐž ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ŃƒŃ”Ń‚Đ” ŃĐżĐ”Ń†Ń–Đ°Đ»ŃŒĐœŃ– фаĐčлО, яĐșі ĐČĐžĐșĐŸŃ€ĐžŃŃ‚ĐŸĐČують Đ°Đ»ŃŒŃ„Đ°-ĐșĐ°ĐœĐ°Đ» ĐŽĐ»Ń Ń‡ĐŸĐłĐŸŃŃŒ Ń–ĐœŃˆĐŸĐłĐŸ, ĐœŃ–Đ¶ ĐżŃ€ĐŸĐ·ĐŸŃ€Ń–ŃŃ‚ŃŒ (ĐœĐ°ĐżŃ€ĐžĐșлаЎ, ĐČ Ń„Đ°Đčлах ĐČĐžŃĐŸŃ‚ Ń–ĐłŃ€ĐŸĐČох ĐŽĐ°ĐœĐžŃ…).

    +
    +

    JPEGOptim

    +
    +
    МаĐșŃĐžĐŒĐ°Đ»ŃŒĐœĐ° яĐșість
    +
    +

    ĐŻĐșŃ‰ĐŸ ĐČŃŃ‚Đ°ĐœĐŸĐČото 100%, ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń буЎД бДз ĐČтрат

    +

    ВсД ĐżĐŸĐœĐ°ĐŽ 100% ŃĐżŃ€ĐžŃ‡ĐžĐœĐžŃ‚ŃŒ Đ·ĐŒĐ”ĐœŃŒŃˆĐ”ĐœĐœŃ яĐșĐŸŃŃ‚Ń– фаĐčліĐČ ŃĐșŃ‰ĐŸ ĐČĐŸĐœĐž ĐČояĐČĐ»ŃŃ‚ŃŒŃŃ Đ·Đ±Đ”Ń€Đ”Đ¶Đ”ĐœĐœĐžĐŒĐž Đ· Đ±Ń–Đ»ŃŒŃˆĐžĐŒĐž Đ·ĐœĐ°Ń‡Đ”ĐœĐœŃĐŒĐž ĐœĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃ яĐșĐŸŃŃ‚Ń–

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    йОп ĐžĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—
    +
    +

    PNGOUT ЎужД ДфДĐșтоĐČĐœĐžĐč алД троĐČає ĐœĐ°ĐŽŃ‚ĐŸ ĐŽĐŸĐČĐłĐŸ. ВоĐșĐŸŃ€ĐžŃŃ‚ĐŸĐČуĐčтД ĐœĐžĐ¶Ń‡Ń– ріĐČĐœŃ– яĐșŃ‰ĐŸ ĐČĐž ĐœĐ”Ń‚Đ”Ń€ĐżĐ»ŃŃ‡Ń–

    +
    +
    ĐŸĐ”Ń€Đ”Ń€ĐČато Ń€ĐŸĐ±ĐŸŃ‚Ńƒ яĐșŃ‰ĐŸ троĐČає ĐœĐ°ĐŽŃ‚ĐŸ ĐŽĐŸĐČĐłĐŸ
    +
    +

    PNGOUT ĐŒĐŸĐ¶Đ»ĐžĐČĐŸ троĐČĐ°Ń‚ĐžĐŒĐ” Đ·Đ°ĐœĐ°ĐŽŃ‚ĐŸ ĐŽĐŸĐČĐłĐŸ піЮ час ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń— ĐœĐ°ĐŽŃ‚ĐŸ ĐČДлОĐșох Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃŒ. Đ”Đ°ĐœĐœĐ° ĐŸĐżŃ†Ń–Ń пДрДрОĐČає Ń€ĐŸĐ±ĐŸŃ‚Ńƒ PNGOUT за 1 хĐČĐžĐ»ĐžĐœŃƒ.

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    РіĐČĐ”ĐœŃŒ ĐžĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—
    +
    +

    Đ”Đ”ŃĐșа ĐșŃ–Đ»ŃŒĐșість Ń€Ń–Đ·ĐœĐŸĐŒĐ°ĐœŃ–Ń‚ĐœĐžŃ… ĐœĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœŃŒ ĐżŃ€ĐŸŃ‚Đ”ŃŃ‚ĐŸĐČĐ°ĐœĐŸ. ЗріЮĐșа ĐŒĐ°Ń” ŃĐ”ĐœŃ ŃĐżŃ€ĐŸĐ±ŃƒĐČато ĐČсі ĐČĐ°Ń€Ń–Đ°ĐœŃ‚Đž

    +
    +
    Đ ĐŸĐ±ĐžŃ‚Đž Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ Ń‡Đ”Ń€Đ”Đ·Ń€ŃĐŽĐșĐŸĐČĐžĐŒĐž (ĐżŃ€ĐŸĐłŃ€Đ”ŃĐžĐČĐœĐ°)
    +
    +

    Đ§Đ”Ń€Đ”Đ·Ń€ŃĐŽĐșĐŸĐČі Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ ĐœĐ° ĐČĐžĐłĐ»ŃĐŽ Đșращі ĐșĐŸĐ»Đž заĐČĐ°ĐœŃ‚Đ°Đ¶Đ”ĐœĐœŃ– лОшД частĐșĐŸĐČĐŸ, алД зазĐČочаĐč Ń‡Đ”Ń€Đ”Đ·Ń€ŃĐŽĐșĐŸĐČість Ń€ĐŸĐ±ĐžŃ‚ŃŒ Đ·Ń‚ĐžŃĐœĐ”ĐœĐœŃ ĐŒĐ”ĐœŃŒŃˆ ДфДĐșтоĐČĐœĐžĐŒ

    +

    Щі ĐŸĐżŃ†Ń–Ń— ĐŒĐ°ŃŽŃ‚ŃŒ тро ŃŃ‚Đ°ĐœĐž: ĐșĐŸĐ»Đž ĐČĐșĐ»ŃŽŃ‡Đ”ĐœĐŸ Ń‚ĐŸ Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ Đ±ŃƒĐŽŃƒŃ‚ŃŒ ĐżŃ€ĐžĐŒŃƒŃĐŸĐČĐŸ Ń‡Đ”Ń€Đ”Đ·Ń€ŃĐŽĐșĐŸĐČĐžĐŒĐž. В ĐŒŃ–ĐșŃĐŸĐČĐ°ĐœĐŸĐŒŃƒ ŃŃ‚Đ°ĐœŃ– ĐČŃ…Ń–ĐŽĐœĐ° Ń‡Đ”Ń€Đ”Đ·Ń€ŃĐŽĐșĐŸĐČість Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ буЎД ĐœĐ” Đ·ĐŒŃ–ĐœĐ”ĐœĐ°, ĐČ ĐČĐžĐŒĐșĐœĐ”ĐœĐŸĐŒŃƒ ŃŃ‚Đ°ĐœŃ– ĐœĐ°ĐČпаĐșĐž Ń‡Đ”Ń€Đ”Đ·Ń€ŃĐŽĐșĐŸĐČість буЎД ĐČĐžĐŽĐ°Đ»Đ”ĐœĐŸ

    +
    +
    +
    +
    +

    Gifsicle

    +

    Đ”Đ»Ń ĐșŃ€Đ°Ń‰ĐŸĐłĐŸ ŃŃ‚ĐžŃĐœĐ”ĐœĐœŃ, ĐČĐž ĐŒĐ°Ń”Ń‚Đ” ĐșĐŸĐœĐČĐ”Ń€Ń‚ŃƒĐČато GIF фаĐčлО у Ń„ĐŸŃ€ĐŒĐ°Ń‚ PNG (ImageOptim ĐœĐ” Ń€ĐŸĐ±ĐžŃ‚ŃŒ Ń†ŃŒĐŸĐłĐŸ аĐČŃ‚ĐŸĐŒĐ°Ń‚ĐžŃ‡ĐœĐŸ).

    +
    + + diff --git a/imageoptim/uk.lproj/ImageOptim.strings b/imageoptim/uk.lproj/ImageOptim.strings new file mode 100644 index 00000000..56f66acc --- /dev/null +++ b/imageoptim/uk.lproj/ImageOptim.strings @@ -0,0 +1,215 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "ВсД ĐœĐ° ĐżĐ”Ń€Đ”ĐŽĐœŃ–Đč ĐżĐ»Đ°Đœ"; + +/* Menu Item "Window" */ +"19.title" = "ВіĐșĐœĐŸ"; + +/* Menu Item "Minimize" */ +"23.title" = "Đ—ĐłĐŸŃ€ĐœŃƒŃ‚Đž"; + +/* Top-level Main Menu "Window" */ +"24.title" = "ВіĐșĐœĐŸ"; + +/* Top-level Main Menu "Services" */ +"130.title" = "ХДрĐČісо"; + +/* Menu Item "Services" */ +"131.title" = "ХДрĐČісо"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "ĐĄŃ…ĐŸĐČато ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ЗаĐșрото ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "ĐĄŃ…ĐŸĐČато Ń–ĐœŃˆŃ–"; + +/* Menu Item "Show All" */ +"150.title" = "ĐŸĐŸĐșазатО ĐČсД"; + +/* Menu Item "Zoom" */ +"197.title" = "ĐŸŃ€ĐžĐ±Đ»ĐžĐ·ĐžŃ‚Đž"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "ĐĄĐżĐžŃĐŸĐș фаĐčліĐČ ĐŽĐ»Ń ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "ЀаĐčĐ»"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "Đ ĐŸĐ·ĐŒŃ–Ń€"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "Đ ĐŸĐ·ĐŒŃ–Ń€ фаĐčла ĐżŃ–ŃĐ»Ń ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "Đ ĐŸĐ·ĐŒŃ–Ń€ фаĐčла ĐżŃ–ŃĐ»Ń ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "ЕĐșĐŸĐœĐŸĐŒŃ–Ń"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "Статус"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "ĐŸŃ€ĐŸ ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "ĐĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃ..."; + +/* Menu Item "Edit" */ +"375.title" = "РДЎагуĐČато"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "РДЎагуĐČато"; + +/* Menu Item "Select All" */ +"377.title" = "ОбратО ВсД"; + +/* Menu Item "Undo" */ +"378.title" = "Đ’Ń–ĐŽĐŒŃ–ĐœĐ°"; + +/* Menu Item "Redo" */ +"384.title" = "Đ’Ń–ĐŽĐœĐŸĐČото"; + +/* Menu Item "Cut" */ +"398.title" = "ВОрізатО"; + +/* Menu Item "Copy" */ +"399.title" = "ĐĄĐșĐŸĐżŃ–ŃŽĐČато"; + +/* Menu Item "Paste" */ +"400.title" = "ВстаĐČото"; + +/* Menu Item "Delete" */ +"402.title" = "ВОЎалОтО"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "Đ”ĐŸĐŽĐ°Ń‚Đž ĐœĐŸĐČі фаĐčлО чо ЎОрДĐșŃ‚ĐŸŃ€Ń–Ń—"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "Đ”ĐŸĐŽĐ°Ń‚Đž"; + +/* Menu Item "File" */ +"429.title" = "ЀаĐčĐ»"; + +/* Top-level Main Menu "File" */ +"430.title" = "ЀаĐčĐ»"; + +/* Menu Item "Add Files
" */ +"437.title" = "Đ”ĐŸĐŽĐ°Ń‚Đž ЀаĐčлО..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "ĐĄŃ‚Đ°Đœ ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "ĐĄŃ‚Đ°Đœ ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "ЗаĐșрото ĐČіĐșĐœĐŸ"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Đ”ĐŸĐżĐŸĐŒĐŸĐłĐ°"; + +/* Menu Item "Help" */ +"504.title" = "Đ”ĐŸĐżĐŸĐŒĐŸĐłĐ°"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim ĐŽĐŸĐżĐŸĐŒĐŸĐłĐ°"; + +/* Window Title "About ImageOptim" */ +"526.title" = "ĐŸŃ€ĐŸ ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "ĐžĐżŃ‚ĐžĐŒŃ–Đ·ŃƒĐČато Đ—ĐœĐŸĐČу"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "ĐŸĐ”Ń€Đ”ĐČірото ĐŸĐœĐŸĐČĐ»Đ”ĐœĐœŃ..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "ĐŸĐ”Ń€Đ”Ń‚ŃĐłĐœŃ–Ń‚ŃŒ ĐłŃ€Đ°Ń„Ń–Ń‡ĐœŃ– фаĐčлО ĐœĐ° Đ·Đ°Đ·ĐœĐ°Ń‡Đ”ĐœŃƒ ĐČОщД ĐŸĐ±Đ»Đ°ŃŃ‚Ń–"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "ĐŸĐ”Ń€Đ”Đ·Đ°ĐżŃƒŃĐș ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* Button "Again" */ +"635.title" = "Đ—ĐœĐŸĐČу"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "ĐČĐ”Ń€ŃŃ–Ń"; + +/* TextFieldCell "version" */ +"646.title" = "ĐČĐ”Ń€ŃŃ–Ń"; + +/* Menu Item "Tools" */ +"655.title" = "Đ†ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Đž"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "Đ†ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Đž"; + +/* Menu Item "Quick Look" */ +"708.title" = "ĐšĐČОЎĐșĐžĐč ĐŸĐ”Ń€Đ”ĐłĐ»ŃĐŽ"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "ĐŸĐ”Ń€Đ”Ń‚ŃĐłĐœĐžŃ‚ŃŒ фаĐčлО сюЮо"; + +/* Menu Item "Delete Completed" */ +"721.title" = "ВОЎалОтО ЗаĐČĐ”Ń€ŃˆĐ”ĐœĐ”"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "ĐžĐżŃ‚ĐžĐŒŃ–Đ·ŃƒĐČато ĐČжД ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐ”"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ХаĐčт ImageOptim"; + +/* Menu Item "View Source" */ +"735.title" = "ĐŸĐŸĐșазатО Đ”Đ¶Đ”Ń€Đ”Đ»ĐŸ"; + +/* Menu Item "Optimized Size" */ +"740.title" = "ĐžĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐœĐžĐč Ń€ĐŸĐ·ĐŒŃ–Ń€"; + +/* Menu Item "Savings" */ +"741.title" = "ЕĐșĐŸĐœĐŸĐŒŃ–Ń"; + +/* Menu Item "Best tool" */ +"747.title" = "НаĐčĐșращоĐč Ń–ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "НаĐčĐșращоĐč Ń–ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚"; + +/* Menu Item "Original Size" */ +"791.title" = "ĐžŃ€ĐžĐłŃ–ĐœĐ°Đ»ŃŒĐœĐžĐč Đ ĐŸĐ·ĐŒŃ–Ń€"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "ĐžŃ€ĐžĐłŃ–ĐœĐ°Đ»ŃŒĐœĐžĐč Đ ĐŸĐ·ĐŒŃ–Ń€"; + +/* Menu Item "Show Columns" */ +"809.title" = "ĐŸĐŸĐșазатО ĐšĐŸĐ»ĐŸĐœĐșĐž"; + +/* Menu Item "Donate" */ +"820.title" = "Đ”ĐŸĐżĐŸĐŒĐŸĐłĐ° ĐżŃ€ĐŸĐ”Đșту"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "ĐŸĐŸĐČĐ”Ń€ĐœŃƒŃ‚Đž ĐŸŃ€ĐžĐłŃ–ĐœĐ°Đ»"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "ĐŻĐșість: 100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "Đ—ŃƒĐżĐžĐœĐžŃ‚Đž"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "ĐĄĐșĐŸĐżŃ–ŃŽĐČато яĐș Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "ĐŸĐŸĐșазатО ĐČ Finder"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "ĐœŃ–ĐœŃ–ĐŒŃ–Đ·Đ°Ń†Ń–Ń Đ· ĐČŃ‚Ń€Đ°Ń‚Đ°ĐŒĐž"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "ĐŸĐŸĐșазатО ĐČ Finder"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "Статус"; diff --git a/imageoptim/uk.lproj/Localizable.strings b/imageoptim/uk.lproj/Localizable.strings new file mode 100644 index 00000000..db3fc0c8 --- /dev/null +++ b/imageoptim/uk.lproj/Localizable.strings @@ -0,0 +1,54 @@ +/* tooltip */ +"%@ failed to start" = "%@ ĐœĐ”ĐČĐŽĐ°Đ»ĐŸŃŃ Đ·Đ°ĐżŃƒŃŃ‚ĐžŃ‚Đž"; + +/* undo command name */ +"Add" = "Đ”ĐŸĐŽĐ°Ń‚Đž"; + +/* undo command name */ +"Cut" = "ВОрізатО"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Всі ĐœĐ”ĐŸĐ±Ń…Ń–ĐŽĐœŃ– Ń–ĐœŃŃ‚Ń€ŃƒĐŒĐ”ĐœŃ‚Đž булО ĐČіЮĐșĐ»ŃŽŃ‡Đ”ĐœŃ– ĐČ ĐĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃŃ…"; + +/* tooltip, generic loading error */ +"Can't open the file" = "ĐĐ”ĐŒĐŸĐ¶Đ»ĐžĐČĐŸ ĐČіЮĐșрото фаĐčĐ»"; + +/* tooltip */ +"File cannot be optimized any further" = "ЀаĐčĐ» Đ±Ń–Đ»ŃŒŃˆĐ” ĐœĐ” ĐŒĐŸĐ¶Đ” Đ±ŃƒŃ‚Đž ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐŸ"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "ЀаĐčĐ» ĐœĐ” є PNG, GIF, ĐœŃ– JPEG"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim буЎД заĐșŃ€ĐžŃ‚ĐŸ ĐżŃ–ŃĐ»Ń заĐșŃ–ĐœŃ‡Đ”ĐœĐœŃ ĐŸĐżŃ‚ĐžĐŒĐžĐ·Đ°Ń†Ń–Ń—"; + +/* tooltip */ +"Inspecting file" = "ĐŸĐ”Ń€Đ”ĐČірĐșа фаĐčлу"; + +/* newly added to the queue */ +"New file" = "ĐĐŸĐČĐžĐč фаĐčĐ»"; + +/* status bar */ +"Lossy minification enabled" = "ĐĄŃ‚ĐžŃĐœĐ”ĐœĐœŃ Đ· ĐČтратато ĐČĐČŃ–ĐŒĐșĐœĐ”ĐœĐŸ"; + +/* tooltip */ +"Optimized file could not be saved" = "ĐĐ”ĐŒĐŸĐ¶Đ»ĐžĐČĐŸ збДрігтО ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐœĐžĐč фаĐčĐ»"; + +/* tooltip */ +"Optimized successfully with %@" = "ĐŁŃĐżŃ–ŃˆĐœĐŸ ĐŸĐżŃ‚ĐžĐŒŃ–Đ·ĐŸĐČĐ°ĐœĐŸ Đ· %@"; + +/* tooltip */ +"Reverted to original" = "ĐŸĐŸĐČĐ”Ń€ĐœŃƒŃ‚ĐŸ ĐŽĐŸ ĐŸŃ€ĐžĐłŃ–ĐœĐ°Đ»Ńƒ"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Đ ĐŸĐ·ĐżĐŸŃ‡Đ°Ń‚ĐŸ %1$@ Đ· %2$@. %3$@ ĐČ Ń†Ń–Đ»ĐŸĐŒŃƒ (ĐŽĐŸ %4$@ ĐœĐ° фаĐčĐ»)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Đ ĐŸĐ·ĐżĐŸŃ‡Đ°Ń‚ĐŸ %1$@ Đ· %2$@. %3$@ ĐœĐ° фаĐčĐ» ĐČ ŃĐ”Ń€Đ”ĐŽĐœŃŒĐŸĐŒŃƒ (ĐŽĐŸ %4$@)"; + +/* command name, tooltip */ +"Started %@" = "Đ ĐŸĐ·ĐżĐŸŃ‡Đ°Ń‚ĐŸ %@"; + +/* tooltip */ +"Waiting to be optimized" = "ЧДĐșає ĐœĐ° ĐŸĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–ŃŽ"; + diff --git a/imageoptim/uk.lproj/PrefsController.strings b/imageoptim/uk.lproj/PrefsController.strings new file mode 100644 index 00000000..134de000 --- /dev/null +++ b/imageoptim/uk.lproj/PrefsController.strings @@ -0,0 +1,69 @@ + +/* Window title */ +"5.title" = "ĐĐ°Đ»Đ°ŃˆŃ‚ŃƒĐČĐ°ĐœĐœŃ ImageOptim"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Đ§Ń–Đ»ŃŒĐœŃ–"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "ĐšĐČОЎĐșісь ĐžĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* Tab quality (for lossy minification) */ +"177.label" = "ĐŻĐșість"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Запосато фаĐčлО ĐœĐ° ĐœĐŸŃŃ–Đč"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "ЗбДрДгтО праĐČа ĐŽĐŸŃŃ‚ŃƒĐżŃƒ ĐŽĐŸ фаĐčліĐČ, Đ°Ń‚Ń€ĐžĐ±ŃƒŃ‚Đž та Đ¶ĐŸŃ€ŃŃ‚Đșі ĐżĐŸŃĐžĐ»Đ°ĐœĐœŃ"; + +/* label in speed tab "Optimization level" */ +"818.title" = "РіĐČĐ”ĐœŃŒ ĐžĐżŃ‚ĐžĐŒŃ–Đ·Đ°Ń†Ń–Ń—"; + +/* "Fast" */ +"819.title" = "ĐšĐČОЎĐșĐŸ"; + +/* "Insane" */ +"820.title" = "ЕĐșŃŃ‚Ń€ĐžĐŒĐ°Đ»ŃŒĐœĐžĐč"; + +/* "Normal" */ +"821.title" = "ЗĐČочаĐčĐœĐžĐč"; + +/* "Extra" */ +"822.title" = "ЕĐșстра"; + +/* Checkbox in Preferences */ +"854.title" = "ХтДртО ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ– PNG (Ò‘Đ°ĐŒĐŒĐ°, ĐșĐŸĐ»Ń–Ń€ĐœŃ– ĐżŃ€ĐŸŃ„Ń–Đ»Ń–, та Ń–ĐœŃˆĐ”)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "ВДб-Đ±Ń€Đ°ŃƒĐ·Đ”Ń€Đž ĐČĐžĐŒĐ°ĐłĐ°ŃŽŃ‚ŃŒ Ò‘Đ°ĐŒĐŒĐ°-ĐŽĐ°ĐœĐœŃ–, яĐșі Đ±ŃƒĐŽŃƒŃ‚ŃŒ ĐČĐžĐŽĐ°Đ»Đ”ĐœŃ–"; + +/* label "JPEG quality" */ +"868.title" = "JPEG яĐșість"; + +/* Checkbox in Preferences */ +"911.title" = "ХтДртО JPEG ĐŒĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ– (EXIF, ĐșĐŸĐ»Ń–Ń€ĐœŃ– ĐżŃ€ĐŸŃ„Ń–Đ»Ń–, GPS, ĐŸĐ±Đ”Ń€Ń‚Đ°ĐœĐœŃ, та Ń–Đœ.)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "ĐœĐ”Ń‚Đ°ĐŽĐ°ĐœĐœŃ– та ĐșĐŸĐ»Ń–Ń€ĐœŃ– ĐżŃ€ĐŸŃ„Ń–Đ»Ń–"; + +/* Header above list of tools to enable */ +"1107.title" = "ВĐșлючОтО"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Đ—Đ±Đ”Ń€Đ”Đ¶Đ”ĐœĐœŃ ĐŽĐŸ ĐŒĐ”Ń€Đ”Đ¶Đ”ĐČох ЎОсĐșіĐČ ĐČŃ–ĐŽĐ±ŃƒĐČається шĐČОЎшД, яĐșŃ‰ĐŸ праĐČа ĐŽĐŸĐ·ĐČĐŸĐ»Ńƒ ĐœĐ” Đ·Đ±Đ”Ń€Ń–ĐłĐ°ŃŽŃ‚ŃŒŃŃ"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "ĐĐ” рДĐșĐŸĐŒĐ”ĐœĐŽŃƒŃ”Ń‚ŃŒŃŃ, яĐșŃ‰ĐŸ ĐČĐž Ń…ĐŸŃ‡Đ”Ń‚Đ” збДрДгтО ĐČĐ±ŃƒĐŽĐŸĐČĐ°ĐœŃƒ Ń–ĐœŃ„ĐŸŃ€ĐŒĐ°Ń†Ń–ŃŽ ĐżŃ€ĐŸ аĐČŃ‚ĐŸŃ€ŃŃŒĐșі праĐČа"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF яĐșість"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "Đ—Ń€ĐŸĐ±ĐžŃ‚Đž фаĐčлО Đ·ĐœĐ°Ń‡ĐœĐŸ ĐŒĐ”ĐœŃŒŃˆĐžĐŒĐž алД таĐșĐŸĐ¶ Đ·ĐŒŃ–ĐœĐ”Ń‚ŃŒŃŃ ŃĐ°ĐŒĐ” Đ·ĐŸĐ±Ń€Đ°Đ¶Đ”ĐœĐœŃ"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG яĐșість"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "ВĐșлючОтО ĐŒŃ–ĐœŃ–ĐŒŃ–Đ·Đ°Ń†Ń–ŃŽ Đ· ĐČтратато"; diff --git a/imageoptim/update_appcast.php b/imageoptim/update_appcast.php deleted file mode 100644 index c9052df0..00000000 --- a/imageoptim/update_appcast.php +++ /dev/null @@ -1,91 +0,0 @@ -load($appcastpath); - -$xp = new DOMXPath($feed); -$xp->registerNamespace("sparkle",SPARKLE_NS); - -$item = $xp->query("//item[enclosure/@sparkle:version='$exactVersion']")->item(0); - -if (!$item) -{ - $item = getElement($feed->getElementsByTagName('channel')->item(0),"item"); - newline($item); -} - -setText(getElement($item, "title"), "Version $niceVersion"); -setText(getElement($item, "pubDate"), date(DATE_RSS)); -setText(getElement($item, "sparkle:minimumSystemVersion", SPARKLE_NS), $minOSVersion); -getElement($item, "description"); - -$enc = getElement($item, "enclosure"); -$enc->setAttributeNS(SPARKLE_NS, "sparkle:version", $exactVersion); -$enc->setAttribute("url", $download_url); -$enc->setAttribute("length", filesize($archivepath)); -$enc->setAttributeNS(SPARKLE_NS, "sparkle:dsaSignature", signUpdate($archivepath, $pempath)); - - -file_put_contents($appcastpath, $feed->saveXML()); - - -function readKey($name) -{ - $plistpath = realpath('Info.plist'); - $domain = preg_replace('/\.plist$/','',$plistpath); - - return system("defaults read ".escapeshellarg($domain)." ".escapeshellarg($name)); -} - -function getElement(DOMElement $parent, $tagname, $ns = NULL) -{ - if ($ns !== NULL) $el = $parent->getElementsByTagNameNS($ns, preg_replace('/^.*:/','',$tagname))->item(0); - else $el = $parent->getElementsByTagName($tagname)->item(0); - - if (!$el) - { - $el = $parent->ownerDocument->createElementNS($ns, $tagname); - $parent->appendChild($el); - newline($parent); - } - - return $el; -} - - -function newline(DOMElement $parent) -{ - $parent->appendChild($parent->ownerDocument->createTextNode("\n")); -} - -function setText(DOMElement $el, $textcontent) -{ - while($el->firstChild) $el->removeChild($el->firstChild); - - if (strlen($textcontent)) - { - $el->appendChild($el->ownerDocument->createTextNode($textcontent)); - } -} - -function signUpdate($archivepath, $pempath) -{ - return system("ruby sign_update.rb ".escapeshellarg($archivepath)." ".escapeshellarg($pempath)); -} diff --git a/imageoptim/vi.lproj/Credits.html b/imageoptim/vi.lproj/Credits.html new file mode 100644 index 00000000..312869fb --- /dev/null +++ b/imageoptim/vi.lproj/Credits.html @@ -0,0 +1,29 @@ +
    +

    ImageOptim láș­p trĂŹnh bởi Kornel LesiƄski vĂ  cĂĄc cộng sá»± từ cĂĄc hĂŁng thứ 3 khĂĄc:

    +
      +
    • +OxiPNG bởi Josh Holmer,
    • +
    • +pngquant bởi Kornel LesiƄski,
    • +
    • +PNGCrush bởi Glenn Randers-Pehrson,
    • +
    • +MozJPEG bởi Mozilla and contributors,
    • +
    • +Guetzli, Zopfli bởi Jyrki Alakuijala, Lode Vandevenne,
    • +
    • +AdvPNG bởi Andrea Mazzoleni, Filipe Estima,
    • +
    • +Jpegoptim bởi Timo Kokkonen,
    • +
    • +Gifsicle bởi Eddie Kohler,
    • +
    • +SVGO bởi Kir Belevich,
    • +
    • +svgcleaner bởi Evgeniy Reizner,
    • +
    • +and PNGOUT bởi Ken Silverman.
    • +
    +

    ImageOptim cĂł thể Ä‘Æ°á»Łc phĂąn phối vĂ  tĂĄi chỉnh sá»­a dá»±a theo GNU General Public License version 2 hoáș·c cĂĄc phiĂȘn báșŁn mới hÆĄn về giáș„y phĂ©p. Bundled PNGOUT khĂŽng thuộc pháș§n giáș„y phĂ©p GPL vĂ  thuộc báșŁn quyền cá»§a cĂŽng ty Ardfry Imaging, LLC.

    +

    Chuyển ngữ tiáșżng Việt (Phan Anh)

    +
    diff --git a/imageoptim/vi.lproj/Help/index.html b/imageoptim/vi.lproj/Help/index.html new file mode 100644 index 00000000..243b4737 --- /dev/null +++ b/imageoptim/vi.lproj/Help/index.html @@ -0,0 +1,75 @@ + + + + +Codestin Search App + + + + + + +

    TĂčy chỉnh hĂŹnh áșŁnh

    + +

    How to use

    + +
      +
    1. Drag'n'drop PNG or JPEG files or directories onto main table view in ImageOptim's window.
    2. + +
    3. Wait until it finishes.
    4. + +
    5. Profit! (from smaller files)
    6. +
    +

    You can also drop files onto ImageOptim's Dock icon.

    + +

    Learn how to change Preferences.

    + +

    Icons in file table

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkImage has been optimized successfully.
    Green XEverything went fine, but image couldn't be optimized any further.
    Gray starOptimization of this file is in progress.
    Gray dotsFile is queued to be optimized after other files are finished.
    Orange exclamation markThere was an error during optimization. You'll find explanation by running Console.app.
    +

    How does it work

    + +

    ImageOptim is a front-end (GUI) for these applications:

    + +
      +
    • TĂčy chỉnh PNG
    • + +
    • PNGCrush
    • + +
    • PNG nĂąng cao
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • and optionally PNGOUT.
    • +
    +

    ImageOptim runs them and automatically selects smallest file.

    + + diff --git a/imageoptim/vi.lproj/Help/prefs.html b/imageoptim/vi.lproj/Help/prefs.html new file mode 100644 index 00000000..8aa40c30 --- /dev/null +++ b/imageoptim/vi.lproj/Help/prefs.html @@ -0,0 +1,142 @@ + + + + +Codestin Search App + + + + + + + +

    + ImageOptim Preferences +

    +

    + « Back to index +

    +

    + General preferences +

    +
    +
    + Preserve file permissions, attributes and hardlinks +
    +
    +

    + Instead of deleting old file writing a new one with the same name, just replaces old file's content in-place. This ensures that all hardlinks, aliases, file ownership, permissions, extended file attributes will stay the same. +

    +

    + It's slightly faster not to preserve permissions. +

    +
    +
    + Strip PNG metadata (gamma, color profiles, optional chunks) +
    +
    +

    + PNG files can have different brightness and saturation in different browsers, because not all browsers support gamma correction and color profiles features equally. Removal of this information makes PNG color more consistent across browsers and reduces file size. +

    +

    + Other invisible information is removed as well, such as DPI and comments. +

    +
    +
    + Strip JPEG metadata (EXIF, color profiles, GPS, rotation, etc.) +
    +
    +

    + Removes image metadata, such as color profile, exposure time, GPS coordinates, camera model and name of software used to create the file. +

    +

    + Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not. +

    +
    +
    +

    + Tools +

    +

    + Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression). +

    +

    + Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files). +

    +
    +

    + JPEGOptim +

    +
    +
    + Maximum quality +
    +
    +

    + If set to 100%, optimization will be lossless. +

    +

    + Anything below 100% will cause lower quality of files if they appear to have been saved with higher quality setting. +

    +
    +
    +
    +
    +

    + PNGOUT +

    +
    +
    + Optimization type +
    +
    +

    + PNGOUT is very effective, but very slow. Use lower level if you're impatient. +

    +
    +
    + Interrupt if takes too long +
    +
    +

    + PNGOUT may need a lot of time to optimize very large images. This option gracefully interrupts PNGOUT after 1 minute. +

    +
    +
    +
    +
    +

    + OxiPNG +

    +
    +
    + Optimization level +
    +
    +

    + Number of different setting combinations tested. It rarely makes sense to try them all. +

    +
    +
    + Make images interlaced (progressive) +
    +
    +

    + Interlaced images look better when they're loaded partially, but usually interlace makes compression less efficient. +

    +

    + This checkbox has three states: if checked, will force images to be interlaced. When mixed, it will keep file's interlace unchanged, unchecked will remove interlace from files. +

    +
    +
    +
    +
    +

    + Gifsicle +

    +

    + For best compression, you should convert GIF files to PNGs (ImageOptim does not do that automatically). +

    +
    + + diff --git a/imageoptim/vi.lproj/ImageOptim.strings b/imageoptim/vi.lproj/ImageOptim.strings new file mode 100644 index 00000000..34bbdf96 --- /dev/null +++ b/imageoptim/vi.lproj/ImageOptim.strings @@ -0,0 +1,198 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "Đem táș„t cáșŁ lĂȘn phĂ­a trước"; + +/* Menu Item "Window" */ +"19.title" = "Cá»­a sổ"; + +/* Class = "NSWindow"; title = "ImageOptim"; ObjectID = "21"; */ +"21.title" = "TĂčy chỉnh hĂŹnh áșŁnh"; + +/* Menu Item "Minimize" */ +"23.title" = "Thu nhỏ"; + +/* Top-level Main Menu "Window" */ +"24.title" = "Cá»­a sổ"; + +/* Class = "NSMenu"; title = "MainMenu"; ObjectID = "29"; */ +"29.title" = "Menu chĂ­nh"; + +/* Top-level Main Menu "Services" */ +"130.title" = "Dịch vỄ"; + +/* Menu Item "Services" */ +"131.title" = "Dịch vỄ"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "áșšn chÆ°ÆĄng trĂŹnh"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "ThoĂĄt chÆ°ÆĄng trĂŹnh"; + +/* Menu Item "Hide Others" */ +"145.title" = "áșšn cĂĄc pháș§n khĂĄc"; + +/* Menu Item "Show All" */ +"150.title" = "Hiển thị táș„t cáșŁ"; + +/* Menu Item "Zoom" */ +"197.title" = "PhĂłng to"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "Danh sĂĄch cĂĄc táș­p tin để tĂčy chỉnh"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "Táș­p tin"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "KĂ­ch thước"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "KĂ­ch thước cá»§a táș­p tin sau khi tĂčy chỉnh"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "KĂ­ch thước cá»§a táș­p tin sau khi tĂčy chỉnh"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "Đang lưu"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "TráșĄng thĂĄi"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "Dịch bởi Phan An"; + +/* Menu Item "Preferences
" */ +"363.title" = "TĂčy biáșżn..."; + +/* Menu Item "Edit" */ +"375.title" = "Chỉnh sá»­a"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "Chỉnh sá»­a"; + +/* Menu Item "Select All" */ +"377.title" = "Chọn táș„t cáșŁ"; + +/* Menu Item "Undo" */ +"378.title" = "Há»§y bỏ thao tĂĄc"; + +/* Menu Item "Redo" */ +"384.title" = "Láș·p láșĄi thao tĂĄc"; + +/* Menu Item "Cut" */ +"398.title" = "CáșŻt"; + +/* Menu Item "Copy" */ +"399.title" = "Sao chĂ©p"; + +/* Menu Item "Paste" */ +"400.title" = "DĂĄn"; + +/* Menu Item "Delete" */ +"402.title" = "XĂła"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "ThĂȘm cĂĄc táș­p tin hoáș·c thư mỄc mới"; + +/* Menu Item "File" */ +"429.title" = "Táș­p tin"; + +/* Top-level Main Menu "File" */ +"430.title" = "Táș­p tin"; + +/* Menu Item "Add Files
" */ +"437.title" = "ThĂȘm Táș­p tin..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "TráșĄng thĂĄi tĂčy chỉnh"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "TráșĄng thĂĄi tĂčy chỉnh"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "Đóng láșĄi"; + +/* Top-level Main Menu "Help" */ +"505.title" = "Trợ giĂșp"; + +/* Menu Item "Help" */ +"504.title" = "Trợ giĂșp"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "Trợ giĂșp chÆ°ÆĄng trĂŹnh"; + +/* Window Title "About ImageOptim" */ +"526.title" = "Dịch bởi Phan Anh"; + +/* Menu Item "Optimize Again" */ +"593.title" = "Tăng tĂčy chỉnh"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "Kiểm tra cáș­p nháș­t..."; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "KĂ©o vĂ  tháșŁ cĂĄc táș­p tin hĂŹnh áșŁnh vĂ o khu vá»±c bĂȘn trĂȘn"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "ThĂȘm"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "Láș·p láșĄi thao tĂĄc tĂčy chỉnh"; + +/* Button "Again" */ +"635.title" = "Láș§n nữa"; + +/* Table column Tooltip "Status" */ +"642.ibExternalAccessibilityDescription" = "TráșĄng thĂĄi"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "phiĂȘn báșŁn"; + +/* TextFieldCell "version" */ +"646.title" = "phiĂȘn báșŁn"; + +/* Menu Item "Tools" */ +"655.title" = "CĂŽng cỄ"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "CĂŽng cỄ"; + +/* Menu Item "Quick Look" */ +"708.title" = "Xem sÆĄ lÆ°á»Łc nhanh"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "Bỏ hĂŹnh áșŁnh vĂ o đñy"; + +/* Menu Item "Delete Completed" */ +"721.title" = "Thá»±c hiện thao tĂĄc xĂła hoĂ n táș„t"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "Đã thá»±c hiện xong thao tĂĄc tĂčy chỉnh"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "Trang web cá»§a chÆ°ÆĄng trĂŹnh"; + +/* Menu Item "View Source" */ +"735.title" = "Xem mĂŁ nguồn"; + +/* Menu Item "Optimized Size" */ +"740.title" = "KĂ­ch thước sau khi tĂčy chỉnh"; + +/* Menu Item "Savings" */ +"741.title" = "Đang lưu"; + +/* Menu Item "Best tool" */ +"747.title" = "CĂŽng cỄ tốt nháș„t"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "CĂŽng cỄ tốt nháș„t"; + +/* Menu Item "Original Size" */ +"791.title" = "KĂ­ch thước ban đáș§u"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "KĂ­ch thước ban đáș§u"; + +/* Menu Item "Show Columns" */ +"809.title" = "Hiển thị cĂĄc cột thĂŽng tin"; + diff --git a/imageoptim/vi.lproj/Localizable.strings b/imageoptim/vi.lproj/Localizable.strings new file mode 100644 index 00000000..bd4e40d1 --- /dev/null +++ b/imageoptim/vi.lproj/Localizable.strings @@ -0,0 +1,46 @@ +/* tooltip */ +"%@ failed to start" = "bị lỗi khi khởi động %@"; + +/* undo command name */ +"Add" = "ThĂȘm vĂ o"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "Táș„t cáșŁ cĂĄc cĂŽng cỄ cáș§n thiáșżt đều bị vĂŽ hiệu hĂła trong TĂčy Biáșżn"; + +/* tooltip, generic loading error */ +"Can't open the file" = "KhĂŽng thể táșŁi táș­p tin vĂ o trong bộ nhớ để xá»­ lĂœ"; + +/* undo command name */ +"Cut" = "CáșŻt"; + +/* tooltip */ +"File cannot be optimized any further" = "Táș­p tin khĂŽng thể Ä‘Æ°á»Łc tĂčy chỉnh thĂȘm nữa"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "Táș­p tin pháșŁi ở dáșĄng PNG, GIF hoáș·c JPEG"; + +/* tooltip */ +"Inspecting file" = "Đang tĂŹm hiểu về táș­p tin"; + +/* newly added to the queue */ +"New file" = "Táș­p tin mới"; + +/* tooltip */ +"Optimized file could not be saved" = "KhĂŽng thể lưu táș­p tin đã Ä‘Æ°á»Łc tĂčy chỉnh hĂła"; + +/* tooltip */ +"Optimized successfully with %@" = "Đã tĂčy chỉnh hĂła thĂ nh cĂŽng với %@"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "Đã lưu %1$@ cá»§a tổng cộng %2$@. %3$@ toĂ n bộ (lĂȘn tới %4$@ với mỗi táș­p tin)"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "Đã lưu %1$@ trong tổng số %2$@. %3$@ trung bĂŹnh cho mỗi táș­p tin (lĂȘn tới %4$@)"; + +/* command name, tooltip */ +"Started %@" = "Đã báșŻt đáș§u %@"; + +/* tooltip */ +/* tooltip */ +"Waiting to be optimized" = "Đang đợi để báșŻt đáș§u cĂĄc pháș§n tĂčy chỉnh khĂĄc"; + diff --git a/imageoptim/vi.lproj/PrefsController.strings b/imageoptim/vi.lproj/PrefsController.strings new file mode 100644 index 00000000..ad81af6c --- /dev/null +++ b/imageoptim/vi.lproj/PrefsController.strings @@ -0,0 +1,57 @@ +/* Window title */ +"5.title" = "TĂčy Biáșżn"; + +/* The first prefs tab (misc/general) */ +"167.label" = "Tổng quan"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "Cáș„p độ TĂčy Chỉnh"; + +/* Title in box "Writing files to disk" */ +"280.title" = "Viáșżt dữ liệu táș­p tin lĂȘn đĩa"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "BáșŁo toĂ n cĂĄc quyền háșĄn tĂĄc động, thuộc tĂ­nh vĂ  cĂĄc liĂȘn káșżt kĂšm theo"; + +/* label in speed tab "Optimization level" */ +"818.title" = "Cáș„p độ TĂčy Chỉnh"; + +/* "Fast" */ +"819.title" = "Nhanh"; + +/* "Insane" */ +"820.title" = "Phồng tĂŽm"; + +/* "Normal" */ +"821.title" = "BĂŹnh thường"; + +/* "Extra" */ +"822.title" = "Bổ sung"; + +/* Checkbox in Preferences */ +"854.title" = "Bỏ qua thĂŽng tin chi tiáșżt về PNG (gamma, hồ sÆĄ mĂ u, chunk tĂčy chọn)"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "TrĂŹnh duyệt web cáș§n loáșĄi bỏ cĂĄc pháș§n gamma chunk"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: Cháș„t lÆ°á»Łng"; + +/* Checkbox in Preferences */ +"911.title" = "Bỏ qua thĂŽng tin chi tiáșżt về JPEG metadata (EXIF, hồ sÆĄ mĂ u, GPS, gĂłc quay, v.v..)"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "ThĂŽng tin chi tiáșżt vĂ  hồ sÆĄ mĂ u"; + +/* Header above list of tools to enable */ +"1107.title" = "Báș­t"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "Lưu vĂ o cĂĄc ổ đĩa máșĄng sáșœ nhanh hÆĄn khi cĂĄc pháș§n quyền háșĄn khĂŽng Ä‘Æ°á»Łc lưu giữ"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "KhĂŽng khuyĂȘn dĂčng náșżu báșĄn cáș§n thĂŽng tin báșŁn quyền về pháș§n nhĂșng"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: Cháș„t lÆ°á»Łng"; + diff --git a/imageoptim/wait.png b/imageoptim/wait.png index cd030e9e..f61de721 100644 Binary files a/imageoptim/wait.png and b/imageoptim/wait.png differ diff --git a/imageoptim/wait@2x.png b/imageoptim/wait@2x.png new file mode 100644 index 00000000..6ced7dd3 Binary files /dev/null and b/imageoptim/wait@2x.png differ diff --git a/imageoptim/zh-Hans.lproj/Help/index.html b/imageoptim/zh-Hans.lproj/Help/index.html new file mode 100644 index 00000000..83bd796f --- /dev/null +++ b/imageoptim/zh-Hans.lproj/Help/index.html @@ -0,0 +1,60 @@ + + + + +Codestin Search App + + + + + + + +

    ImageOptim

    +

    äœżç”šæ–čæł•

    +
      +
    1. 拖攟 PNG 或 JPEG 文件或者文件ć€č戰 ImageOptim çȘ—ćŁçš„æ–‡ä»¶ćˆ—èĄšäž­ă€‚
    2. +
    3. ç­‰ćŸ…ć€„ç†ćźŒæˆă€‚
    4. +
    5. ćŸ—ćˆ°æ”čć–„ïŒˆæ–‡ä»¶ć˜ć°äș†ïŒïŒ‰
    6. +
    +

    æ–‡ä»¶ć°†èą«èŸƒć°çš„ç‰ˆæœŹèŠ†ç›–ă€‚æœȘäŒ˜ćŒ–çš„ç‰ˆæœŹć°†èą«ç§»ćŠšćˆ°ćșŸçșžçŻ“ă€‚

    +

    悚äčŸćŻä»„æ‹–æ”Ÿæ–‡ä»¶ćˆ° ImageOptim 的 Dock ć›Ÿæ ‡äžŠă€‚

    +

    äș†è§ŁćŠ‚äœ•æ›Žæ”č驖选éĄč。

    +

    æ–‡ä»¶ćˆ—èĄšäž­çš„ć›Ÿæ ‡

    + + + + + + + + + + + + + + + + + + + + + +
    绿è‰ČćŻčć‹Ÿć›Ÿç‰‡ć·ČäŒ˜ćŒ–æˆćŠŸă€‚
    绿è‰Č Xäž€ćˆ‡éƒœćŸˆć„œïŒŒäœ†ć›Ÿćƒäžèƒœć†äŒ˜ćŒ–çš„æ›Žć°äș†ă€‚
    灰è‰Čæ˜Ÿæ˜Ÿæ­ŁćœšäŒ˜ćŒ–èż™äžȘæ–‡ä»¶ă€‚
    灰è‰Čç‚čçŠ¶æ–‡ä»¶æ­ŁćœšæŽ’é˜Ÿç­‰ćŸ…èą«äŒ˜ćŒ–ïŒŒç­‰ćŸ…ć…¶ä»–æ–‡ä»¶ć€„ç†ćźŒæˆă€‚
    橙è‰Č感ćčć·äŒ˜ćŒ–æ—¶ć‘ç”Ÿé”™èŻŻă€‚æ‚šćŻä»„èżèĄŒ Console.app æŸ„çœ‹è§Łé‡Šă€‚
    +

    äŒ˜ćŒ–ćŽŸç†

    +

    ImageOptim æ˜Żèż™äș›ćș”甚皋ćșçš„ć‰ç«Żç•ŒéąïŒˆGUI

    +
      +
    • Zopfli
    • +
    • OxiPNG
    • +
    • PNGCrush
    • +
    • AdvPNG
    • +
    • JpegOptim
    • +
    • JpegTran
    • +
    • MozJPEG
    • +
    • 揊 PNGOUT。
    • +
    +

    ImageOptim äŒšèżèĄŒćźƒä»ŹïŒŒæœ€ćŽè‡ȘćŠšé€‰æ‹©æœ€ć°çš„æ–‡ä»¶ă€‚

    + + diff --git a/imageoptim/zh-Hans.lproj/Help/prefs.html b/imageoptim/zh-Hans.lproj/Help/prefs.html new file mode 100644 index 00000000..c62de93c --- /dev/null +++ b/imageoptim/zh-Hans.lproj/Help/prefs.html @@ -0,0 +1,77 @@ + + + + +Codestin Search App + + + + + + +

    ImageOptim 驖选éĄč

    +

    « ć›žćˆ°äž»éĄ”

    +

    ćžžè§„éŠ–é€‰éĄč

    +
    +
    äżç•™æ–‡ä»¶çš„æƒé™ă€ć±žæ€§ć’ŒçĄŹé“ŸæŽ„
    +
    +

    äžç”šćˆ é™€æ—§æ–‡ä»¶ć†ć†™ć…„ćŒćçš„æ–°æ–‡ä»¶ïŒŒæ”čäžșç›ŽæŽ„æ›żæąćŽŸć§‹æ–‡ä»¶çš„ć†…ćźčă€‚èż™æ ·ćŻä»„äżèŻæ‰€æœ‰çš„çĄŹé“ŸæŽ„ă€æ–‡ä»¶ćˆ«ćă€æ–‡ä»¶æ‰€æœ‰è€…ă€æƒé™ă€æ‰©ć±•çš„æ–‡ä»¶ć±žæ€§ç­‰äżæŒäžć˜ă€‚

    +

    äžäżç•™æ–‡ä»¶æƒé™çš„èŻć€„ç†é€ŸćșŠäŒšćż«äž€ç‚č。

    +
    +
    扔陀 PNG ć…ƒæ•°æźïŒˆäŒœé©Źć€Œă€éąœè‰Čé…çœźă€ćŻé€‰ćŒșć—ïŒ‰
    +
    +

    PNG æ–‡ä»¶ćŻä»„ćœšäžćŒçš„æ”è§ˆć™šäž­æœ‰äžćŒçš„äșźćșŠć’Œé„±ć’ŒćșŠïŒŒć› äžșäžæ˜Żæ‰€æœ‰çš„æ”è§ˆć™šéƒœæ”ŻæŒäŒœçŽ›æ Ąæ­Łć’Œéąœè‰Čé…çœźæ–‡ä»¶ćŠŸèƒœă€‚ćˆ é™€æ­€äżĄæŻäŒšäœż PNG ćœšè·šæ”è§ˆć™šæ—¶çš„éąœè‰Čæ›ŽćŠ äž€è‡ŽïŒŒäčŸćŻć‡ć°æ–‡ä»¶ć€§ć°ă€‚

    +

    ć…¶ä»–æ— ćœąçš„äżĄæŻäčŸèą«ćŽ»é™€ïŒŒäŸ‹ćŠ‚ DPI ć’Œæłšé‡Šă€‚

    +
    +
    扔陀 JPEG ć…ƒæ•°æźïŒˆEXIF、鱜è‰Čé…çœźă€GPS äœçœźă€æ—‹èœŹæ–čć‘ç­‰ïŒ‰
    +
    +

    ćŽ»é™€ć›Ÿç‰‡ć…ƒæ•°æźïŒŒèŻžćŠ‚éąœè‰Čé…çœźæ–‡ä»¶ă€æ›ć…‰æ—¶é—Žă€GPS ćæ ‡ă€æ‘„ćƒæœșćž‹ć·ä»„ćŠćˆ›ć»șèŻ„æ–‡ä»¶çš„èœŻä»¶ćç§°ă€‚

    +

    ć”Œć…„ćŒçš„ç‰ˆæƒäżĄæŻäčŸèą«ćŽ»é™€ă€‚èŻ·æłšæ„ïŒŒé€šćžžçš„ć›Ÿćƒć‡ć—ćˆ°ç‰ˆæƒæł•äżæŠ€ïŒŒæ— èźșćźƒæ˜ŻćŠćŒ…ć«æ— ćœąçš„ć…ƒæ•°æźă€‚

    +
    +
    +

    ć·„ć…·

    +

    Zopfli 撌 PNGOUT æ˜Żéžćžžć„œçš„ PNG ćŽ‹çŒ©ć·„ć…·ïŒŒäœ†é€ŸćșŠćŸˆæ…ąă€‚ćŠ‚æžœæ‚šæƒłćż«é€ŸäŒ˜ćŒ– PNG æ–‡ä»¶ïŒŒćŻä»„çŠç”šćźƒä»ŹïŒˆćȘ留例 AdvPNG æ˜Żé€ŸćșŠæœ€ćż«çš„ïŒŒćźƒä»ç„¶æœ‰äžé”™çš„ćŽ‹çŒ©æ•ˆæžœïŒ‰ă€‚

    +

    Zopfli 撌 OptiPNG ć°†æž…é™€é€æ˜ŽćƒçŽ ïŒˆäčŸç§°â€œdirty alpha”的 RGB ć€Œă€‚çŠç”šèż™äž€äžȘć·„ć…·ïŒŒćŠ‚æžœæ‚šćœšäŒ˜ćŒ–äœżç”š alpha é€šé“èŸŸćˆ°é€æ˜Žçš„ç‰čćźšæ–‡ä»¶ïŒˆäŸ‹ćŠ‚æžžæˆæ•°æźäž­çš„ heightmap æ–‡ä»¶ïŒ‰ă€‚

    +
    +

    JPEGOptim

    +
    +
    最高莚量
    +
    +

    èźŸçœźäžș 100% æ—¶ïŒŒäŒ˜ćŒ–äžșæ— æŸćŽ‹çŒ©ă€‚

    +

    任䜕䜎äșŽ 100% çš„ć€Œć°†ćŻŒè‡ŽäœŽèŽšé‡çš„æ–‡ä»¶ïŒŒćŠ‚æžœćźƒä»ŹäŒŒäčŽć·Čèą«é‡‡ç”šèŸƒé«˜çš„èŽšé‡èźŸçœźäżć­˜ă€‚

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    äŒ˜ćŒ–ç±»ćž‹
    +
    +

    PNGOUT æ˜Żéžćžžæœ‰æ•ˆçš„ïŒŒäœ†æ˜ŻéžćžžçŒ“æ…ąă€‚ćŠ‚æžœäœ æČĄæœ‰è€ćżƒïŒŒèŻ·èźŸçœźäžș蟃䜎的çș§ćˆ«ă€‚

    +
    +
    ćŠ‚æžœæ‰§èĄŒæ—¶é—Žć€Șé•żćˆ™äž­æ–­
    +
    +

    PNGOUT ćœšćŽ‹çŒ©éžćžžć€§çš„ć›Ÿç‰‡æ—¶ćŻèƒœéœ€èŠć€§é‡çš„æ—¶é—Žă€‚æ­€é€‰éĄčćŻćŠšćŽïŒŒäŒšć°†è¶…èż‡1戆钟的 PNGOUT ć€„ç†äŒ˜é›…çš„äž­æ–­ă€‚

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    äŒ˜ćŒ–çș§ćˆ«
    +
    +

    äžćŒæ•°ć­—çš„èźŸçœźç»„ćˆć·Čç»æ”‹èŻ•ă€‚ć°èŻ•æ‰€æœ‰ć€ŒæČĄæœ‰ć€šć°‘意äč‰ă€‚

    +
    +
    äœżć›Ÿç‰‡äș€é”™ćŒ– (æžèż›ćŒèœœć…„)
    +
    +

    äș€é”™ćŒ–çš„ć›Ÿćƒćœšè§‚çœ‹æ—¶äŒšæœ‰éš”èĄŒćŠ èœœçš„æ•ˆæžœïŒŒäœ†äș€é”™ćŽçš„ćŽ‹çŒ©æ•ˆæžœäŒšçšäœŽäž€äș›ă€‚

    +

    æ­€ć€é€‰æĄ†ć…·æœ‰äž‰ç§çŠ¶æ€ïŒšé€‰äž­æ—¶ïŒŒć°†ćŒșćˆ¶ć›Ÿćƒèą«äș€é”™ćŒ–ă€‚ćŠé€‰æ—¶ïŒŒæ–‡ä»¶çš„äș€é”™ćŒ–çŠ¶æ€äžć˜ă€‚æœȘé€‰äž­æ—¶ïŒŒć°†ćŽ»é™€æ–‡ä»¶çš„äș€é”™ćŒ–。

    +
    +
    +
    +
    +

    Gifsicle

    +

    äžșäș†æ›Žć„œçš„ćŽ‹çŒ©æ•ˆæžœïŒŒèŻ·ć°† GIF æ–‡ä»¶èœŹæąäžș PNG 文件ImageOptim 䞍䌚è‡ȘćŠšćšèż™ä»¶äș‹ïŒ‰ă€‚

    +
    + + diff --git a/imageoptim/zh-Hans.lproj/ImageOptim.strings b/imageoptim/zh-Hans.lproj/ImageOptim.strings new file mode 100644 index 00000000..10243bac --- /dev/null +++ b/imageoptim/zh-Hans.lproj/ImageOptim.strings @@ -0,0 +1,215 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "ć‰çœźć…šéƒšçȘ—揣"; + +/* Menu Item "Window" */ +"19.title" = "çȘ—揣"; + +/* Menu Item "Minimize" */ +"23.title" = "æœ€ć°ćŒ–"; + +/* Top-level Main Menu "Window" */ +"24.title" = "çȘ—揣"; + +/* Top-level Main Menu "Services" */ +"130.title" = "æœćŠĄ"; + +/* Menu Item "Services" */ +"131.title" = "æœćŠĄ"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "隐藏 ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "退ć‡ș ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "éšè—ć…¶ä»–"; + +/* Menu Item "Show All" */ +"150.title" = "ć…šéƒšæ˜Ÿç€ș"; + +/* Menu Item "Zoom" */ +"197.title" = "猩攟"; + +/* ScrollView Tooltip "List of files to optimize" */ +"236.ibExternalAccessibilityDescription" = "èŠäŒ˜ćŒ–çš„æ–‡ä»¶ćˆ—èĄš"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "文件"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "ć€§ć°"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.headerToolTip" = "äŒ˜ćŒ–ćŽçš„æ–‡ä»¶ć€§ć°"; + +/* Table Column Tooltip "Size of file after optimization" */ +"239.ibExternalAccessibilityDescription" = "äŒ˜ćŒ–ćŽçš„æ–‡ä»¶ć€§ć°"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "ć·Č节省"; + +/* TextField Tooltip "Status" */ +"294.ibExternalAccessibilityDescription" = "状态"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "慳äșŽ ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "驖选éĄč..."; + +/* Menu Item "Edit" */ +"375.title" = "猖蟑"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "猖蟑"; + +/* Menu Item "Select All" */ +"377.title" = "慹选"; + +/* Menu Item "Undo" */ +"378.title" = "撀销"; + +/* Menu Item "Redo" */ +"384.title" = "重恚"; + +/* Menu Item "Cut" */ +"398.title" = "ć‰Ș戇"; + +/* Menu Item "Copy" */ +"399.title" = "ć€ćˆ¶"; + +/* Menu Item "Paste" */ +"400.title" = "çČ˜èŽŽ"; + +/* Menu Item "Delete" */ +"402.title" = "ćˆ é™€"; + +/* Button Tooltip "Add new files or directories" */ +"423.ibExternalAccessibilityDescription" = "æ·»ćŠ æ–°æ–‡ä»¶æˆ–ç›źćœ•"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "æ·»ćŠ "; + +/* Menu Item "File" */ +"429.title" = "文件"; + +/* Top-level Main Menu "File" */ +"430.title" = "文件"; + +/* Menu Item "Add Files
" */ +"437.title" = "æ·»ćŠ æ–‡ä»¶..."; + +/* Table Column Tooltip "Optimization status" */ +"462.headerToolTip" = "äŒ˜ćŒ–çŠ¶æ€"; + +/* Table Column Tooltip "Optimization status" */ +"462.ibExternalAccessibilityDescription" = "äŒ˜ćŒ–çŠ¶æ€"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "慳闭çȘ—揣"; + +/* Top-level Main Menu "Help" */ +"505.title" = "枟抩"; + +/* Menu Item "Help" */ +"504.title" = "枟抩"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim 枟抩"; + +/* Window Title "About ImageOptim" */ +"526.title" = "慳äșŽ ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "ć†æŹĄäŒ˜ćŒ–"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "æŁ€æŸ„æ›Žæ–°â€Š"; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "æ‹–æ”Ÿć›Ÿćƒæ–‡ä»¶ćˆ°äžŠæ–čćŒș㟟"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "ć†æŹĄèż›èĄŒäŒ˜ćŒ–ć€„ç†"; + +/* Button "Again" */ +"635.title" = "ć†äŒ˜ćŒ–"; + +/* TextField Tooltip "version" */ +"645.ibExternalAccessibilityDescription" = "ç‰ˆæœŹ"; + +/* TextFieldCell "version" */ +"646.title" = "ç‰ˆæœŹ"; + +/* Menu Item "Tools" */ +"655.title" = "ć·„ć…·"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "ć·„ć…·"; + +/* Menu Item "Quick Look" */ +"708.title" = "éą„è§ˆ"; + +/* Class = "DragDropImageView Tooltip "Drop images here" */ +"712.ibExternalAccessibilityDescription" = "ć°†ć›Ÿç‰‡æ‹–è‡łæ­€ć€„"; + +/* Menu Item "Delete Completed" */ +"721.title" = "ćˆ é™€ć·ČćźŒæˆ"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "äŒ˜ćŒ–ć·ČäŒ˜ćŒ–çš„"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim 眑站"; + +/* Menu Item "View Source" */ +"735.title" = "柄看æșç "; + +/* Menu Item "Optimized Size" */ +"740.title" = "äŒ˜ćŒ–çš„ć€§ć°"; + +/* Menu Item "Savings" */ +"741.title" = "ć·Č节省"; + +/* Menu Item "Best tool" */ +"747.title" = "æœ€ć„œçš„ć·„ć…·"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "æœ€ć„œçš„ć·„ć…·"; + +/* Menu Item "Original Size" */ +"791.title" = "ćŽŸć§‹ć€§ć°"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "ćŽŸć§‹ć€§ć°"; + +/* Menu Item "Show Columns" */ +"809.title" = "星ç€ș的戗"; + +/* Menu Item "Donate" */ +"820.title" = "捐蔠"; + +/* Class = "NSMenuItem"; title = "Revert to Original"; ObjectID = "FLl-C9-GLI"; */ +"FLl-C9-GLI.title" = "æąć€ćŽŸçŠ¶"; + +/* Class = "NSMenuItem"; title = "Quality: 100%"; ObjectID = "Grx-lU-4x5"; */ +"Grx-lU-4x5.title" = "莚量100%"; + +/* Class = "NSMenuItem"; title = "Stop"; ObjectID = "HUo-GO-MIU"; */ +"HUo-GO-MIU.title" = "ćœæ­ą"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "ć€ćˆ¶ Data URL"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "ddH-3k-EuT"; */ +"ddH-3k-EuT.title" = "朹 Finder 䞭星ç€ș"; + +/* Class = "NSMenuItem"; title = "Lossy minification"; ObjectID = "euw-8w-uMu"; */ +"euw-8w-uMu.title" = "æœ‰æŸćŽ‹çŒ©"; + +/* Class = "NSMenuItem"; title = "Show in Finder"; ObjectID = "p0m-mn-Gep"; */ +"p0m-mn-Gep.title" = "朹 Finder 䞭星ç€ș"; + +/* Class = "NSTableHeaderView"; ibExternalAccessibilityDescription = "Status"; ObjectID = "ygK-3e-IlX"; */ +"ygK-3e-IlX.ibExternalAccessibilityDescription" = "状态"; diff --git a/imageoptim/zh-Hans.lproj/Localizable.strings b/imageoptim/zh-Hans.lproj/Localizable.strings new file mode 100644 index 00000000..522185cf --- /dev/null +++ b/imageoptim/zh-Hans.lproj/Localizable.strings @@ -0,0 +1,54 @@ +/* tooltip */ +"%@ failed to start" = "%@ ćŻćŠšć€±èŽ„"; + +/* undo command name */ +"Add" = "æ·»ćŠ "; + +/* undo command name */ +"Cut" = "ć‰Ș戇"; + +/* tooltip */ +"All neccessary tools have been disabled in Preferences" = "朹驖选éĄčäž­ć·ČçŠç”šæ‰€æœ‰ćż…èŠć·„ć…·"; + +/* tooltip, generic loading error */ +"Can't open the file" = "æ— æł•æ‰“ćŒ€èŻ„æ–‡ä»¶"; + +/* tooltip */ +"File cannot be optimized any further" = "æ–‡ä»¶äžèƒœèą«èż›äž€æ­„äŒ˜ćŒ–"; + +/* tooltip */ +"File is neither PNG, GIF nor JPEG" = "æ–‡ä»¶äžæ˜Ż PNG、GIF 或 JPEG æ ŒćŒ"; + +/* status bar */ +"ImageOptim will quit when optimizations are complete" = "ImageOptim ć°†ćœšäŒ˜ćŒ–ćźŒæˆćŽé€€ć‡ș"; + +/* tooltip */ +"Inspecting file" = "æ­ŁćœšæŁ€æŸ„æ–‡ä»¶"; + +/* newly added to the queue */ +"New file" = "新文件"; + +/* status bar */ +"Lossy minification enabled" = "ćŸźé‡æœ‰æŸć·Č搯甹"; + +/* tooltip */ +"Optimized file could not be saved" = "äŒ˜ćŒ–çš„æ–‡ä»¶æœȘèƒœäżć­˜"; + +/* tooltip */ +"Optimized successfully with %@" = "äŒ˜ćŒ–æˆćŠŸäșŽ %@"; + +/* tooltip */ +"Reverted to original" = "ć·Čæąć€ćŽŸçŠ¶"; + +/* total ratio, status bar */ +"Saved %@ out of %@. %@ overall (up to %@ per file)" = "节省äș† %1$@ïŒˆæ€»èźĄ %2$@ïŒ‰ă€‚æ€»äœ“ %3$@ ïŒˆæŻäžȘæ–‡ä»¶æœ€ć€š %4$@"; + +/* per file avg, status bar */ +"Saved %@ out of %@. %@ per file on average (up to %@)" = "节省äș† %1$@ïŒˆæ€»ć…±%2$@ïŒ‰ă€‚ćčłć‡æŻäžȘ文件 %3$@ïŒˆæœ€ć€š %4$@"; + +/* command name, tooltip */ +"Started %@" = "ćŒ€ć§‹ %@"; + +/* tooltip */ +"Waiting to be optimized" = "ç­‰ćŸ…èą«äŒ˜ćŒ–"; + diff --git a/imageoptim/zh-Hans.lproj/PrefsController.strings b/imageoptim/zh-Hans.lproj/PrefsController.strings new file mode 100644 index 00000000..9f6e2396 --- /dev/null +++ b/imageoptim/zh-Hans.lproj/PrefsController.strings @@ -0,0 +1,87 @@ + +/* Window title */ +"5.title" = "ImageOptim 驖选éĄč"; + +/* The first prefs tab (misc/general) */ +"167.label" = "ćžžè§„"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "äŒ˜ćŒ–é€ŸćșŠ"; + +/* Tab quality (for lossy minification) */ +"177.label" = "莚量"; + +/* Title in box "Writing files to disk" */ +"280.title" = "ć°†æ–‡ä»¶ć†™ć…„çŁç›˜"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "äżç•™æ–‡ä»¶çš„æƒé™ă€ć±žæ€§ć’ŒçĄŹé“ŸæŽ„"; + +/* label in speed tab "Optimization level" */ +"818.title" = "äŒ˜ćŒ–çș§ćˆ«"; + +/* "Fast" */ +"819.title" = "ćż«é€Ÿ"; + +/* "Insane" */ +"820.title" = "疯狂"; + +/* "Normal" */ +"821.title" = "æ™źé€š"; + +/* "Extra" */ +"822.title" = "éąć€–"; + +/* button "Make images interlaced (progressive)"; ObjectID = "828"; */ +"828.title" = "äœżć›Ÿç‰‡äș€é”™ćŒ– (æžèż›ćŒèœœć…„)"; + +/* "Interlaced files are usually larger"; ObjectID = "831"; */ +"831.title" = "äș€é”™ćŒ–ć€„ç†çš„æ–‡ä»¶é€šćžžäŒšæ›Žć€§äș›"; + +/* Checkbox in Preferences */ +"854.title" = "扔陀 PNG ć…ƒæ•°æźïŒˆäŒœé©Źć€Œă€éąœè‰Čé…çœźă€ćŻé€‰ćŒșć—ïŒ‰"; + +/* "Optimization type" */ +"856.title" = "äŒ˜ćŒ–ç±»ćž‹"; + +/* Optimization level: "Simple" */ +"857.title" = "缀捕"; + +/* Optimization level: "Longest match" */ +"861.title" = "æœ€é•żćŒč配"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "Web æ”è§ˆć™šéœ€èŠçš„äŒœé©Źć€ŒćŒșć—ć°†èą«ćŽ»é™€"; + +/* label "JPEG quality" */ +"868.title" = "JPEG 莚量"; + +/* Checkbox in Preferences */ +"911.title" = "扔陀 JPEG ć…ƒæ•°æźïŒˆEXIF、鱜è‰Čé…çœźă€GPS äœçœźă€æ—‹èœŹæ–čć‘ç­‰ïŒ‰"; + +/* button "Interrupt if takes too long to execute"; ObjectID = "946"; */ +"946.title" = "ćŠ‚æžœæ‰§èĄŒæ—¶é—Žć€Șé•żćˆ™äž­æ–­"; + +/* Box title "Metadata and color profiles" */ +"1043.title" = "ć…ƒæ•°æźć’Œéąœè‰Čé…çœźæ–‡ä»¶"; + +/* Header above list of tools to enable */ +"1107.title" = "搯甹"; + +/* "Saving to network drives is faster when permissions are not preserved" */ +"1122.title" = "äžäżç•™æƒé™æ—¶äżć­˜ćˆ°çœ‘ç»œé©±ćŠšć™šäŒšæ›Žćż«"; + +/* If stripping metadata "Not recommended if you rely on embedded copyright information" */ +"1124.title" = "äžæŽšèïŒŒćŠ‚æžœäœ äŸè”–ć”Œć…„ćŒçš„ç‰ˆæƒäżĄæŻ"; + +/* Class = "NSTextFieldCell"; title = "GIF quality"; ObjectID = "OIX-Pu-xXQ"; */ +"OIX-Pu-xXQ.title" = "GIF 莚量"; + +/* "Makes files much smaller, but may change how images look"; (Note about setting lossy on) */ +"LossTipTxt.title" = "äœżæ–‡ä»¶æ›Žć°ïŒŒäœ†æ–‡ä»¶çš„è§‚æ„ŸćŻèƒœäș§ç”Ÿć˜ćŒ–"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG 莚量"; + +/* Class = "NSButtonCell"; title = "Enable lossy minification"; ObjectID = "wBgxz7uj"; */ +"wBgxz7uj.title" = "ćŻç”šæœ‰æŸćŽ‹çŒ©"; diff --git a/imageoptim/zh-Hant.lproj/Credits.html b/imageoptim/zh-Hant.lproj/Credits.html new file mode 100644 index 00000000..7815ba20 --- /dev/null +++ b/imageoptim/zh-Hant.lproj/Credits.html @@ -0,0 +1,29 @@ +
    +

    ImageOptim by Kornel LesiƄski and contributors is a GUI for 3rd party utilities:

    + +

    ImageOptim can be redistributed and modified under GNU General Public License version 2 or later. +Bundled PNGOUT is not covered by the GPL and is included with permission of Ardfry Imaging, LLC.

    +
    diff --git a/imageoptim/zh-Hant.lproj/Help/index.html b/imageoptim/zh-Hant.lproj/Help/index.html new file mode 100644 index 00000000..321980ba --- /dev/null +++ b/imageoptim/zh-Hant.lproj/Help/index.html @@ -0,0 +1,74 @@ + + + + +Codestin Search App + + + + + +

    ImageOptim

    + +

    äœżç”šæ–čæł•

    + +
      +
    1. 拖攟PNGJPEGæȘ”æĄˆæˆ–æ˜Żèł‡æ–™ć€Ÿè‡łImageOptim芖çȘ—äž­çš„æȘ”æĄˆćˆ—èĄš
    2. + +
    3. ç­‰ćŸ…è™•ç†ćźŒæˆ
    4. + +
    5. ćŸ—ćˆ°ć„œè™•! (曠ç‚șæȘ”æĄˆèźŠć°äș†)
    6. +
    +

    䜠äčŸćŻä»„拖攟æȘ”æĄˆè‡łDock朖ç€ș侊

    + +

    èźŠæ›Žćć„œèš­ćźš

    + +

    æȘ”æĄˆćˆ—èĄšäž­çš„ćœ–ç€ș

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Green CheckmarkæˆćŠŸćœ°æœ€äœłćŒ–ćœ–ç‰‡
    Green X朖片æČ’什éșŒć•éĄŒïŒŒćȘæ˜Żäžèƒœć†çžźć°äș†
    Gray staræ­Łćœšæœ€äœłćŒ–é€™ćŒ”ćœ–ç‰‡
    Gray dotsćŸ…ć…¶ä»–ćœ–ç‰‡æœ€äœłćŒ–ćźŒæˆćŸŒïŒŒè™•ç†é€™ćŒ”ćœ–ç‰‡
    Orange exclamation markæœ€äœłćŒ–è™•ç†æ™‚æœ‰éŒŻèȘ€ç™Œç”Ÿă€‚ æŹČć–ćŸ—èȘȘæ˜Žè«‹ćŸ·èĄŒConsole.app。
    +

    æœ€äœłćŒ–ćŽŸç†

    + +

    ImageOptimç‚șäž‹ćˆ—æ‡‰ç”šçš‹ćŒçš„ć‰ç«Żä»‹éą(GUI):

    + +
      +
    • OxiPNG
    • + +
    • PNGCrush
    • + +
    • AdvPNG
    • + +
    • JpegOptim
    • + +
    • MozJPEG
    • + +
    • PNGOUT遞甚.
    • +
    +

    ImageOptimćŸ·èĄŒé€™äș›æ‡‰ç”šçš‹ćŒäžŠè‡Șć‹•éžæ“‡æœ€ć°çš„æȘ”æĄˆèŒžć‡ș。

    + + diff --git a/imageoptim/zh-Hant.lproj/Help/prefs.html b/imageoptim/zh-Hant.lproj/Help/prefs.html new file mode 100644 index 00000000..0da76671 --- /dev/null +++ b/imageoptim/zh-Hant.lproj/Help/prefs.html @@ -0,0 +1,75 @@ + + + +Codestin Search App + + + + + +

    ImageOptim ćć„œèš­ćźš

    +

    « ć›žćˆ°äž»é 

    +

    äž€èˆŹèš­ćźš

    +
    +
    保留æȘ”æĄˆæŹŠé™ă€ć±Źæ€§ćŠæ°žäč…連甐
    +
    +

    侩非ćˆȘ陀舊æȘ”æĄˆć†ćŻ«ć…„ćŒćçš„æ–°æȘ”æĄˆïŒŒè€Œæ˜Żç›ŽæŽ„ć–ä»ŁćŽŸć§‹æȘ”æĄˆçš„ć…§ćźčă€‚é€™æšŁćŻä»„äżè­‰æ‰€æœ‰çš„æ°žäč…連甐、æȘ”æĄˆćˆ„損、æȘ”æĄˆæ“æœ‰è€…ćŠæŹŠé™æˆ–æ˜Żć…¶ä»–æȘ”æĄˆć±Źæ€§ç¶­æŒćŽŸæšŁă€‚

    +

    侍保留æȘ”æĄˆæŹŠé™çš„è©±ïŒŒè™•ç†é€ŸćșŠæœƒćż«äž€é»žă€‚

    +
    +
    æž…é™€æ‰€æœ‰èŒ”ćŠ©èł‡æ–™ćĄŠ
    +
    +

    ćŠ‚æžœäœ æ˜Żç‚șäș†ç¶Čé è€Œæœ€äœłćŒ–ïŒŒé‚ŁéșŒè«‹ć•Ÿç”šćźƒć§ă€‚è‹„䜠需芁PNGçš„éĄć€–èšŠæŻïŒŒć°±è«‹é—œé–‰ă€‚

    +

    Other invisible information is removed as well, such as DPI and comments.

    +
    +
    移陀EXIFèšŠæŻćŠèš»è§Ł
    +
    +

    ç§»é™€ćœ–ç‰‡çš„éĄć€–èšŠæŻïŒˆćœ±ćƒè‰Č㟟ç©șé–“ă€æ›ć…‰æ™‚é–“ă€GPSćș§æš™ă€ç›žæ©Ÿćž‹è™Ÿă€ç”ąç”Ÿæ­€æȘ”æĄˆçš„æ‡‰ç”šçš‹ćŒç­‰ç­‰ïŒ‰ă€‚

    +

    Embedded copyright information is removed as well. Please note that generally images are protected by copyright law regardless whether they contain such invisible metadata or not.

    +
    +
    +

    Tools

    +

    Zopfli and PNGOUT are very good PNG compressors, but are very slow. Disable them if you need to optimize PNG files quickly (leave only AdvPNG for fastest, but still good compression).

    +

    Zopfli and OxiPNG will clean RGB values of transparent pixels (known as “dirty alpha”). Disable these two tools if you're optimizing special files that use alpha channel for something else than transparency (e.g. heightmap in game data files).

    +
    +

    JPEGOptim

    +
    +
    æœ€äœłć“èłȘ
    +
    +

    èš­ćźšç‚ș100%時ç‚șç„ĄæćŁ“çžźă€‚

    +

    èš­ćźšç‚ș100%ä»„äž‹æ™‚ïŒŒæœƒć°Žè‡Žćœ±ćƒć“èłȘ例降。

    +
    +
    +
    +
    +

    PNGOUT

    +
    +
    Optimization type
    +
    +

    PNGOUT is very effective, but very slow. Use lower level if you're impatient.

    +
    +
    Interrupt if takes too long
    +
    +

    PNGOUTćŻèƒœéœ€èŠć€§é‡çš„æ™‚é–“äŸ†è™•ç†èŒƒć€§çš„ćœ–ç‰‡æȘ”æĄˆă€‚æ­€éžé …ć•Ÿç”šćŸŒïŒŒæœƒć°‡è¶…éŽäž€ćˆ†é˜è™•ç†æ™‚é–“çš„æœ€äœłćŒ–è™•ç†ć„Șé›…ćœ°äž­æ–·ă€‚

    +
    +
    +
    +
    +

    OxiPNG

    +
    +
    æœ€äœłćŒ–çš‹ćșŠ
    +
    +

    èš­ćźšç”„ćˆçš„æžŹè©Šæ•žé‡ă€‚ćŸșæœŹäžŠäžéœ€æžŹè©Šæ‰€æœ‰çš„ç”„ćˆă€‚

    +
    +
    äș€éŒŻćŒ–ćœ–ç‰‡
    +
    +

    ç•¶ćœ–ç‰‡éƒšä»œèŒ‰ć…„æ™‚ïŒŒäș€éŒŻćŒćœ–ç‰‡æœ‰èŒƒć„œçš„éĄŻç€șă€‚äœ†äș€éŒŻćŒ–ćŻèƒœèź“ćŁ“çžźçŽ‡èŒƒç‚șäœŽäž‹ă€‚

    +

    é€™ć€‹æ žć–æ–čćĄŠæœ‰äž‰çšźç‹€æ…‹ïŒš ç‚șéžć–æ™‚ïŒŒæœƒç”Ÿæˆäș€éŒŻćŒ–çš„ćœ–ç‰‡ă€‚ç‚șćŠéžæ™‚ïŒŒæȘ”æĄˆçš„äș€éŒŻćŒ–ć±Źæ€§äžèźŠă€‚æœȘéžć–æ™‚ïŒŒæœƒç§»é™€äș€éŒŻćŒ–。

    +
    +
    +
    +
    +

    Gifsicle

    +

    ç‚șäș†æ›Žć„œçš„ćŁ“çžźçŽ‡ïŒŒè«‹ć°‡GIF蜉成PNGæȘ”æĄˆă€‚ïŒˆImageOptim䞊䞍會è‡Ș拕ćč«äœ ćšé€™ä»¶äș‹ă€‚

    +
    + + diff --git a/imageoptim/zh-Hant.lproj/ImageOptim.strings b/imageoptim/zh-Hant.lproj/ImageOptim.strings new file mode 100644 index 00000000..a1ebbb8a --- /dev/null +++ b/imageoptim/zh-Hant.lproj/ImageOptim.strings @@ -0,0 +1,165 @@ +/* Menu Item "Bring All to Front" */ +"5.title" = "ć…šéƒšç§»è‡łæœ€äžŠć±€"; + +/* Menu Item "Window" */ +"19.title" = "芖çȘ—"; + +/* Menu Item "Minimize" */ +"23.title" = "æœ€ć°ćŒ–"; + +/* Top-level Main Menu "Window" */ +"24.title" = "芖çȘ—"; + +/* Top-level Main Menu "Services" */ +"130.title" = "æœć‹™"; + +/* Menu Item "Services" */ +"131.title" = "æœć‹™"; + +/* Menu Item "Hide ImageOptim" */ +"134.title" = "隱藏 ImageOptim"; + +/* Menu Item "Quit ImageOptim" */ +"136.title" = "雱開 ImageOptim"; + +/* Menu Item "Hide Others" */ +"145.title" = "éš±è—ć…¶ä»–"; + +/* Menu Item "Show All" */ +"150.title" = "慹郹顯ç€ș"; + +/* Menu Item "Zoom" */ +"197.title" = "çžźæ”Ÿ"; + +/* Table Column Title (MUST BE SHORT) "File" */ +"238.headerCell.title" = "æȘ”æĄˆ"; + +/* Table Column Title (MUST BE SHORT) "Size" */ +"239.headerCell.title" = "ćźč量"; + +/* Table Column Title (MUST BE SHORT) "Savings" */ +"243.headerCell.title" = "節箄率"; + +/* Menu Item "About ImageOptim" */ +"361.title" = "關斌 ImageOptim"; + +/* Menu Item "Preferences
" */ +"363.title" = "ćć„œèš­ćźšâ€Š"; + +/* Menu Item "Edit" */ +"375.title" = "ç·šèŒŻ"; + +/* Top-level Main Menu "Edit" */ +"376.title" = "ç·šèŒŻ"; + +/* Menu Item "Select All" */ +"377.title" = "慹遾"; + +/* Menu Item "Undo" */ +"378.title" = "還掟"; + +/* Menu Item "Redo" */ +"384.title" = "重恚"; + +/* Menu Item "Cut" */ +"398.title" = "ć‰Ș例"; + +/* Menu Item "Copy" */ +"399.title" = "è€‡èŁœ"; + +/* Menu Item "Paste" */ +"400.title" = "èČŒäžŠ"; + +/* Menu Item "Delete" */ +"402.title" = "ćˆȘ陀"; + +/* Menu Item "File" */ +"429.title" = "æȘ”æĄˆ"; + +/* Top-level Main Menu "File" */ +"430.title" = "æȘ”æĄˆ"; + +/* Menu Item "Add Files
" */ +"437.title" = "æ–°ćąžæȘ”æĄˆâ€Š"; + +/* Class = "NSMenuItem"; title = "Close Window"; ObjectID = "498"; */ +"498.title" = "關閉芖çȘ—"; + +/* Menu Item "Help" */ +"504.title" = "èŒ”ćŠ©èȘȘ明"; + +/* Top-level Main Menu "Help" */ +"505.title" = "èŒ”ćŠ©èȘȘ明"; + +/* Menu Item "ImageOptim Help" */ +"506.title" = "ImageOptim èŒ”ćŠ©èȘȘ明"; + +/* Window Title "About ImageOptim" */ +"526.title" = "關斌 ImageOptim"; + +/* Menu Item "Optimize Again" */ +"593.title" = "憍ćșŠæœ€äœłćŒ–處理"; + +/* Menu Item "Check for Updates
" */ +"624.title" = "æȘ࿟„曎新 "; + +/* TextFieldCell "Drag and drop image files onto the area above" */ +"632.title" = "è«‹æ‹–æ”Ÿćœ–ç‰‡æȘ”æĄˆè‡łäžŠæ–č捀柟"; + +/* Button "Add" */ +"423.ibShadowedToolTip" = "æ–°ćąž"; + +/* Button; alternateTitle = "Run optimizations again" */ +"635.alternateTitle" = "憍ćșŠé€ČèĄŒæœ€äœłćŒ–è™•ç†"; + +/* Button "Again" */ +"635.title" = "ć†è™•ç†"; + +/* TextFieldCell "version" */ +"646.title" = "ç‰ˆæœŹ"; + +/* Menu Item "Tools" */ +"655.title" = "ć·„ć…·"; + +/* Top-level Main Menu "Tools" */ +"656.title" = "ć·„ć…·"; + +/* Menu Item "Quick Look" */ +"708.title" = "預芜"; + +/* Menu Item "Delete Completed" */ +"721.title" = "ćˆȘ陀ć·ČćźŒæˆ"; + +/* Menu Item "Optimize Optimized" */ +"725.title" = "æœ€äœłćŒ–ć·ČćźŒæˆ"; + +/* Menu Item "ImageOptim Website" */ +"733.title" = "ImageOptim ç¶Č站"; + +/* Menu Item "View Source" */ +"735.title" = "æȘąèŠ–ćŽŸć§‹çąŒ"; + +/* Menu Item "Optimized Size" */ +"740.title" = "æœ€äœłćŒ–ćŸŒćźč量"; + +/* Menu Item "Savings" */ +"741.title" = "節箄率"; + +/* Menu Item "Best tool" */ +"747.title" = "æœ€äœłć·„ć…·"; + +/* Table Column Title (MUST BE SHORT) "Best tool" */ +"771.headerCell.title" = "æœ€äœłć·„ć…·"; + +/* Menu Item "Original Size" */ +"791.title" = "掟構ćźč量"; + +/* Table Column Title (MUST BE SHORT) "Original Size" */ +"795.headerCell.title" = "掟構ćźč量"; + +/* Menu Item "Show Columns" */ +"809.title" = "饯ç€șæŹ„äœ"; + +/* Menu Item "Copy as Data URL"; ID "NlY-Bc-7tu"; */ +"NlY-Bc-7tu.title" = "è€‡èŁœ Data URL"; + diff --git a/imageoptim/zh-Hant.lproj/Localizable.strings b/imageoptim/zh-Hant.lproj/Localizable.strings new file mode 100644 index 00000000..51f8efa3 --- /dev/null +++ b/imageoptim/zh-Hant.lproj/Localizable.strings @@ -0,0 +1,21 @@ +/* undo command name */ +"Add" = "æ–°ćąž"; + +/* undo command name */ +"Cut" = "ć‰Ș例"; + +/* tooltip */ +"File cannot be optimized any further" = "æȘ”æĄˆç„Ąæł•é€Čäž€æ­„æœ€äœłćŒ–"; + +/* newly added to the queue */ +"New file" = "新文件"; + +/* tooltip */ +"Optimized file could not be saved" = "ç„Ąæł•ć„Čć­˜æœ€äœłćŒ–ćŸŒçš„æȘ”æĄˆ"; + +/* tooltip */ +"Optimized successfully with %@" = "ćˆ©ç”š%@æˆćŠŸæœ€äœłćŒ–æȘ”æĄˆ"; + +/* tooltip */ +"Waiting to be optimized" = "ç­‰ć€™ć…¶ä»–æœ€äœłćŒ–è™•ç†"; + diff --git a/imageoptim/zh-Hant.lproj/PrefsController.strings b/imageoptim/zh-Hant.lproj/PrefsController.strings new file mode 100644 index 00000000..575ff22c --- /dev/null +++ b/imageoptim/zh-Hant.lproj/PrefsController.strings @@ -0,0 +1,48 @@ +/* Window title */ +"5.title" = "ImageOptim ćć„œèš­ćźš"; + +/* The first prefs tab (misc/general) */ +"167.label" = "äž€èˆŹ"; + +/* Tab "Optimization speed" (speed/efficiency trade-off) */ +"168.label" = "æœ€äœłćŒ–çš‹ćșŠ"; + +/* Title in box "Writing files to disk" */ +"280.title" = "æȘ”æĄˆćݫㅄ"; + +/* checkbox "Preserve file permissions, attributes and hardlinks" */ +"804.title" = "保留æȘ”æĄˆæŹŠé™ă€ć±Źæ€§ćŠæ°žäč…連甐"; + +/* label in speed tab "Optimization level" */ +"818.title" = "æœ€äœłćŒ–çš‹ćșŠ"; + +/* "Fast" */ +"819.title" = "ćż«é€Ÿ"; + +/* "Insane" */ +"820.title" = "瘋狂"; + +/* "Normal" */ +"821.title" = "æ™źé€š"; + +/* "Extra" */ +"822.title" = "è¶…éĄ"; + +/* Checkbox in Preferences */ +"854.title" = "PNG: æž…é™€æ‰€æœ‰èŒ”ćŠ©èł‡æ–™ćĄŠ"; + +/* note "Web browsers require gamma chunks to be removed" */ +"865.title" = "ć€šæ•žç€èŠœć™šç„Ąæł•è™•ç†Gammaæ Ąæș–èšŠæŻ"; + +/* label "JPEG quality" */ +"868.title" = "JPEG: 擁èłȘ"; + +/* Checkbox in Preferences */ +"911.title" = "JPEG: 移陀EXIFèšŠæŻćŠèš»è§Ł"; + +/* Header above list of tools to enable */ +"1107.title" = "敟甹"; + +/* Quality setting slider "PNG quality"; ObjectID = "kE2-GK-JIe"; */ +"kE2-GK-JIe.title" = "PNG: 擁èłȘ"; + diff --git a/jpegoptim/Makefile b/jpegoptim/Makefile old mode 100755 new mode 100644 index 3e34df15..5a0cd8be --- a/jpegoptim/Makefile +++ b/jpegoptim/Makefile @@ -1,8 +1,8 @@ +build: all -jpegoptim.c: - curl http://www.kokkonen.net/tjko/src/jpegoptim-1.2.4.tar.gz | tar xz --strip-components=1 --exclude=Makefile +all: src/jpegoptim.h -clean: - -install: +src/jpegoptim.h: ../.gitmodules + ../scripts/fetch-submodule src && touch src/jpegoptim.h +.PHONY: build all install clean diff --git a/jpegoptim/config.h b/jpegoptim/config.h deleted file mode 100644 index fc8eb865..00000000 --- a/jpegoptim/config.h +++ /dev/null @@ -1,43 +0,0 @@ -/* config.h. Generated automatically by configure. */ -/* config.h.in. - * $Id: config.h.in,v 1.2 2002/12/04 13:17:58 tjko Exp $ - * - */ - - -/* Define if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* The number of bytes in a int. */ -#define SIZEOF_INT 4 - -/* The number of bytes in a long. */ -#define SIZEOF_LONG 8 - -/* Define if you have the getopt_long function. */ -#define HAVE_GETOPT_LONG 1 - -/* Define if you have the header file. */ -#define HAVE_GETOPT_H 1 - -/* Define if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define if you have the header file. */ -#define HAVE_LIBGEN_H 1 - -/* Define if you have the jpeg library (-ljpeg). */ -/* #undef HAVE_LIBJPEG */ - - - -/* Define if you have broken jmorecfg.h (SGI's usually have this problem) */ -/* #undef BROKEN_METHODDEF */ - -#define HOST_TYPE "i386-apple-darwin10.2.0" - - -/* eof */ diff --git a/jpegoptim/jpeg-6b/jpeg.xcodeproj/project.pbxproj b/jpegoptim/jpeg-6b/jpeg.xcodeproj/project.pbxproj index 752c5fbd..16dd62e5 100644 --- a/jpegoptim/jpeg-6b/jpeg.xcodeproj/project.pbxproj +++ b/jpegoptim/jpeg-6b/jpeg.xcodeproj/project.pbxproj @@ -399,7 +399,6 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LD_DYLIB_INSTALL_NAME = ./libjpeg.dylib; - MACOSX_DEPLOYMENT_TARGET = 10.5; ONLY_ACTIVE_ARCH = YES; PREBINDING = NO; RUN_CLANG_STATIC_ANALYZER = NO; @@ -427,7 +426,6 @@ GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; LD_DYLIB_INSTALL_NAME = ./libjpeg.dylib; - MACOSX_DEPLOYMENT_TARGET = 10.5; PREBINDING = NO; RUN_CLANG_STATIC_ANALYZER = YES; SDKROOT = macosx10.6; diff --git a/jpegoptim/jpegoptim.xcodeproj/project.pbxproj b/jpegoptim/jpegoptim.xcodeproj/project.pbxproj index 0420f3f6..b6d3744e 100644 --- a/jpegoptim/jpegoptim.xcodeproj/project.pbxproj +++ b/jpegoptim/jpegoptim.xcodeproj/project.pbxproj @@ -3,13 +3,13 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 5A8167B30EA11E3F00962CF2 /* getopt.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8167820EA11E3F00962CF2 /* getopt.c */; }; - 5A8167B40EA11E3F00962CF2 /* getopt1.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8167830EA11E3F00962CF2 /* getopt1.c */; }; - 5A8167B50EA11E3F00962CF2 /* jpegoptim.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8167840EA11E3F00962CF2 /* jpegoptim.c */; }; + 5A1663981B529A6100DF7D3C /* jpegdest.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A1663971B529A6100DF7D3C /* jpegdest.c */; }; + 5A16639A1B529A8B00DF7D3C /* misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A1663991B529A8B00DF7D3C /* misc.c */; }; + 5A8167B50EA11E3F00962CF2 /* src/jpegoptim.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A8167840EA11E3F00962CF2 /* src/jpegoptim.c */; }; 5AA49DB5111CC25500137D50 /* libimageoptimjpeg.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AA49DB0111CC23000137D50 /* libimageoptimjpeg.dylib */; }; /* End PBXBuildFile section */ @@ -28,24 +28,23 @@ remoteGlobalIDString = D2AAC0630554660B00DB518D; remoteInfo = jpeg; }; - 5F084AA91124135A00C7B074 /* PBXContainerItemProxy */ = { + 5AB115511B52B1DF00A3C73A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5F084AA61124134B00C7B074; + remoteGlobalIDString = 5AB1154C1B52B1C800A3C73A; remoteInfo = download; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 5A1663971B529A6100DF7D3C /* jpegdest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jpegdest.c; path = src/jpegdest.c; sourceTree = ""; }; + 5A1663991B529A8B00DF7D3C /* misc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = misc.c; path = src/misc.c; sourceTree = ""; }; 5A27BA31139B09080095FC2F /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = SOURCE_ROOT; }; 5A27BA32139B09080095FC2F /* debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = SOURCE_ROOT; }; 5A401AF1111A75A500908C9B /* jpeg.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = jpeg.xcodeproj; path = ../libjpeg/jpeg.xcodeproj; sourceTree = ""; }; - 5A4552991024E22200A69944 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; 5A81674F0EA11E3F00962CF2 /* jconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jconfig.h; path = ../libjpeg/jconfig.h; sourceTree = SOURCE_ROOT; }; - 5A8167820EA11E3F00962CF2 /* getopt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = getopt.c; sourceTree = SOURCE_ROOT; }; - 5A8167830EA11E3F00962CF2 /* getopt1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = getopt1.c; sourceTree = SOURCE_ROOT; }; - 5A8167840EA11E3F00962CF2 /* jpegoptim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jpegoptim.c; sourceTree = SOURCE_ROOT; }; + 5A8167840EA11E3F00962CF2 /* src/jpegoptim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = src/jpegoptim.c; sourceTree = SOURCE_ROOT; }; 8DD76FB20486AB0100D96B5E /* jpegoptim */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jpegoptim; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -65,7 +64,7 @@ isa = PBXGroup; children = ( 5A401AF1111A75A500908C9B /* jpeg.xcodeproj */, - 08FB7795FE84155DC02AAC07 /* jpegoptim */, + 5A81674E0EA11E3F00962CF2 /* jpegoptim */, 5A27BA31139B09080095FC2F /* release.xcconfig */, 5A27BA32139B09080095FC2F /* debug.xcconfig */, 1AB674ADFE9D54B511CA2CBB /* Products */, @@ -73,14 +72,6 @@ name = jpegoptim; sourceTree = ""; }; - 08FB7795FE84155DC02AAC07 /* jpegoptim */ = { - isa = PBXGroup; - children = ( - 5A81674E0EA11E3F00962CF2 /* jpegoptim */, - ); - name = jpegoptim; - sourceTree = ""; - }; 1AB674ADFE9D54B511CA2CBB /* Products */ = { isa = PBXGroup; children = ( @@ -92,11 +83,10 @@ 5A81674E0EA11E3F00962CF2 /* jpegoptim */ = { isa = PBXGroup; children = ( - 5A4552991024E22200A69944 /* config.h */, - 5A8167820EA11E3F00962CF2 /* getopt.c */, - 5A8167830EA11E3F00962CF2 /* getopt1.c */, 5A81674F0EA11E3F00962CF2 /* jconfig.h */, - 5A8167840EA11E3F00962CF2 /* jpegoptim.c */, + 5A1663971B529A6100DF7D3C /* jpegdest.c */, + 5A1663991B529A8B00DF7D3C /* misc.c */, + 5A8167840EA11E3F00962CF2 /* src/jpegoptim.c */, ); name = jpegoptim; sourceTree = ""; @@ -112,10 +102,10 @@ /* End PBXGroup section */ /* Begin PBXLegacyTarget section */ - 5F084AA61124134B00C7B074 /* download */ = { + 5AB1154C1B52B1C800A3C73A /* download */ = { isa = PBXLegacyTarget; buildArgumentsString = "$(ACTION)"; - buildConfigurationList = 5F084AB01124136700C7B074 /* Build configuration list for PBXLegacyTarget "download" */; + buildConfigurationList = 5AB115501B52B1C900A3C73A /* Build configuration list for PBXLegacyTarget "download" */; buildPhases = ( ); buildToolPath = /usr/bin/make; @@ -138,8 +128,8 @@ buildRules = ( ); dependencies = ( + 5AB115521B52B1DF00A3C73A /* PBXTargetDependency */, 5A62DB1F111CCEC1008848D0 /* PBXTargetDependency */, - 5F084AAA1124135A00C7B074 /* PBXTargetDependency */, ); name = jpegoptim; productInstallPath = "$(HOME)/bin"; @@ -153,13 +143,20 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + TargetAttributes = { + 5AB1154C1B52B1C800A3C73A = { + CreatedOnToolsVersion = 7.0; + }; + }; }; buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "jpegoptim" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( + English, en, ); mainGroup = 08FB7794FE84155DC02AAC07 /* jpegoptim */; @@ -173,7 +170,7 @@ projectRoot = ""; targets = ( 8DD76FA90486AB0100D96B5E /* jpegoptim */, - 5F084AA61124134B00C7B074 /* download */, + 5AB1154C1B52B1C800A3C73A /* download */, ); }; /* End PBXProject section */ @@ -193,9 +190,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A8167B30EA11E3F00962CF2 /* getopt.c in Sources */, - 5A8167B40EA11E3F00962CF2 /* getopt1.c in Sources */, - 5A8167B50EA11E3F00962CF2 /* jpegoptim.c in Sources */, + 5A1663981B529A6100DF7D3C /* jpegdest.c in Sources */, + 5A16639A1B529A8B00DF7D3C /* misc.c in Sources */, + 5A8167B50EA11E3F00962CF2 /* src/jpegoptim.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -207,10 +204,10 @@ name = jpeg; targetProxy = 5A62DB1E111CCEC1008848D0 /* PBXContainerItemProxy */; }; - 5F084AAA1124135A00C7B074 /* PBXTargetDependency */ = { + 5AB115521B52B1DF00A3C73A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 5F084AA61124134B00C7B074 /* download */; - targetProxy = 5F084AA91124135A00C7B074 /* PBXContainerItemProxy */; + target = 5AB1154C1B52B1C800A3C73A /* download */; + targetProxy = 5AB115511B52B1DF00A3C73A /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -218,16 +215,16 @@ 1DEB928608733DD80010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = jpegoptim; + SKIP_INSTALL = YES; }; name = Debug; }; 1DEB928708733DD80010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = jpegoptim; + SKIP_INSTALL = YES; }; name = Release; }; @@ -235,11 +232,25 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27BA32139B09080095FC2F /* debug.xcconfig */; buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = HAVE_CONFIG_H; + ENABLE_TESTABILITY = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + NDEBUG, + NS_BLOCK_ASSERTIONS, + "HOST_TYPE='\"darwin\"'", + "HAVE_MKSTEMPS=1", + "HAVE_UNISTD_H=1", + "HAVE_GETOPT_H=1", + "HAVE_GETOPT_LONG=1", + "HAVE_LABS=1", + ); GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_SIGN_COMPARE = NO; GCC_WARN_UNINITIALIZED_AUTOS = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../libjpeg/"; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../libjpeg/", + "$(SRCROOT)/../libjpeg/src/", + ); + ONLY_ACTIVE_ARCH = YES; }; name = Debug; }; @@ -252,28 +263,33 @@ GCC_OBJC_CALL_CXX_CDTORS = NO; GCC_PREPROCESSOR_DEFINITIONS = ( NDEBUG, - HAVE_CONFIG_H, + NS_BLOCK_ASSERTIONS, + "HOST_TYPE='\"darwin\"'", + "HAVE_MKSTEMPS=1", + "HAVE_UNISTD_H=1", + "HAVE_GETOPT_H=1", + "HAVE_GETOPT_LONG=1", + "HAVE_LABS=1", ); GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_SIGN_COMPARE = NO; GCC_WARN_UNINITIALIZED_AUTOS = NO; - HEADER_SEARCH_PATHS = "$(SRCROOT)/../libjpeg/"; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../libjpeg/", + "$(SRCROOT)/../libjpeg/src/", + ); }; name = Release; }; - 5F084AA71124134C00C7B074 /* Debug */ = { + 5AB1154D1B52B1C900A3C73A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; - PRODUCT_NAME = download; }; name = Debug; }; - 5F084AA81124134C00C7B074 /* Release */ = { + 5AB1154E1B52B1C900A3C73A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = YES; - PRODUCT_NAME = download; }; name = Release; }; @@ -298,11 +314,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5F084AB01124136700C7B074 /* Build configuration list for PBXLegacyTarget "download" */ = { + 5AB115501B52B1C900A3C73A /* Build configuration list for PBXLegacyTarget "download" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5F084AA71124134C00C7B074 /* Debug */, - 5F084AA81124134C00C7B074 /* Release */, + 5AB1154D1B52B1C900A3C73A /* Debug */, + 5AB1154E1B52B1C900A3C73A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/jpegoptim/src b/jpegoptim/src new file mode 160000 index 00000000..5ee8facc --- /dev/null +++ b/jpegoptim/src @@ -0,0 +1 @@ +Subproject commit 5ee8faccb87456231cbd975faa7f75e0fdf74840 diff --git a/jpegtran/jpegrescan b/jpegtran/jpegrescan deleted file mode 100755 index f42b5eae..00000000 --- a/jpegtran/jpegrescan +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/perl -ws -# jpegrescan by Loren Merritt -# Last updated: 2008-11-29 / 2012-02-01 -# This code is public domain. - -use File::Slurp; -@ARGV==2 or die "usage: jpegrescan in.jpg out.jpg\ntries various progressive scan orders\n"; -$fin = $ARGV[0]; -$fout = $ARGV[1]; -$ftmp = "$fout-$$.scan"; -$jtmp = $fout; -$verbose = $v; -$quiet = $q; -@strip = $s ? ("-copy","none") : ("-copy","all"); -undef $_ for $v,$q,$s; -undef $/; -$|=1; - -$old_size = -s $fin; - -# convert the input to baseline, just to make all the other conversions faster -# FIXME there's still a bunch of redundant computation in separate calls to jpegtran -open $OLDERR, ">&", STDERR; -open STDERR, ">", $ftmp; -open TRAN, "-|", "./jpegtran", "-v", @strip, "-optimize", $fin or die; -write_file($jtmp, ); -close TRAN; -open STDERR, ">&", $OLDERR; - -$type = read_file($ftmp); -$type =~ /components=(\d+)/ or die; -$rgb = $1==3 ? 1 : $1==1 ? 0 : die "not RGB nor gray\n"; - -# FIXME optimize order for either progressive transfer or decoding speed -sub canonize { - my $txt = $prefix.$suffix.shift; - $txt =~ s/\s*;\s*/;\n/g; - $txt =~ s/^\s*//; - $txt =~ s/ +/ /g; - $txt =~ s/: (\d+) (\d+)/sprintf ": %2d %2d", $1, $2/ge; - # treat u and v identically. I shouldn't need to do this, but with jpegtran overhead it saves 9% speed. cost: .008% bitrate. - $txt =~ s/^2:.*\n//gm; - $txt =~ s/^1:(.+)\n/1:$1\n2:$1\n/gm; - # dc before ac, coarse before fine - my @txt = sort {"$a\n$b" =~ /: *(\d+) .* (\d);\n.*: *(\d+) .* (\d);/ or die; !$3 <=> !$1 or $4 <=> $2 or $a cmp $b;} split /\n/, $txt; - return join "\n", @txt; -} - -sub try { - my $txt = canonize(shift); - return $memo{$txt} if $memo{$txt}; - write_file($ftmp, $txt); - open TRAN, "-|", "./jpegtran", @strip, "-scans", $ftmp, $jtmp or die; - $data = ; - close TRAN; - my $s = length $data; - $s or die; - $memo{$txt} = $s; - !$quiet && print $verbose ? "$txt\n$s\n\n" : "."; - return $s; -} - -sub triesn { - my($bmode, $bsize); - my ($limit, @modes) = @_; - my $overshoot = 0; - for(@modes) { - my $s = try($_); - if(!$bsize || $s < $bsize) { - $bsize = $s; - $bmode = $_; - $overshoot = 0; - } elsif(++$overshoot >= $limit) { - last; - } - } - return $bmode; -} - -sub tries { triesn(99, @_); } - -$prefix = ""; -$suffix = ""; - -if($rgb) { - # 012 helps very little - # 0/12 and 0/1/2 are pretty evenly matched in frequency, but 0/12 wins in total size if every image had to use the same mode - # dc refinement passes never help - $dc = tries( - # "0: 0 0 0 0; 1 2: 0 0 0 0;", # two scans expose a bug in Opera <= 11.61 - "0: 0 0 0 0; 1: 0 0 0 0; 2: 0 0 0 0;"); - # jpegtran won't let me omit dc entirely, but I can at least quantize it away to make the rest of the tests faster. - $prefix = "0 1 2: 0 0 0 9;"; -} else { - $dc = "0: 0 0 0 0;"; - $prefix = "0: 0 0 0 9;"; -} - -# luma can make use of up to 3 refinement passes. -# chroma can make use of up to 2 refinement passes. -# refinement passes have some chance of being split (luma: 4%,4%,4%. chroma: 20%,8%) but the total bit gain is negligible. -# msb pass should almost always be split (luma: 87%, chroma: 81%). -# I have no theoretical reason for this list of split positions, they're just the most common in practice. -# splitting into 3 ections is often slightly better, but the total number of bits saved is negligible. -# FIXME: penalize lots of refinement passes because it's slower to decode. if so, then also force overwrite if bigger than the input. -sub try_splits { - my $str = shift; - my %n = map {$_ => sprintf "$c: 1 %d $str; $c: %d 63 $str;", $_, $_+1} 2,5,8,12,18; - my $mode = triesn(2, "$c: 1 63 $str;", @n{2,8,5}); - return $mode if $mode ne $n{8}; - return triesn(1, $mode, @n{12,18}); -} - -foreach $c (0..$rgb) { - my @modes; - my $ml = ""; - for(0..($c?2:3)) { - push @modes, "$c: 1 8 0 $_; $c: 9 63 0 $_;".$ml; - $ml .= sprintf("$c: 1 63 %d %d;", $_+1, $_); - } - my $refine = triesn(1, @modes); - $refine =~ s/.* (0 \d);//; - $ac .= $refine . try_splits($1); -} - -$prefix = ""; -undef %memo; -$mode = canonize($dc.$ac); -try($mode); -$size = $memo{$mode}; -!$quiet && print "\n$mode\n$size\n"; -if($size < $old_size) { - write_file($fout, $data); -} -unlink $ftmp; diff --git a/jpegtran/jpegtran.xcodeproj/project.pbxproj b/jpegtran/jpegtran.xcodeproj/project.pbxproj index df34b984..11bac640 100644 --- a/jpegtran/jpegtran.xcodeproj/project.pbxproj +++ b/jpegtran/jpegtran.xcodeproj/project.pbxproj @@ -3,15 +3,14 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 5A739BAF0EA4038A00D751E1 /* jpegtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739BAE0EA4038A00D751E1 /* jpegtran.c */; }; - 5A739BB80EA4042600D751E1 /* transupp.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739BB70EA4042600D751E1 /* transupp.c */; }; - 5A739C140EA406A000D751E1 /* cdjpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739C130EA406A000D751E1 /* cdjpeg.c */; }; - 5A739C1C0EA406F600D751E1 /* rdswitch.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739C1B0EA406F600D751E1 /* rdswitch.c */; }; - 5A8594E51460BCC10044095A /* jpegrescan in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5A8594CD1460BB340044095A /* jpegrescan */; }; + 5A739BAF0EA4038A00D751E1 /* src/jpegtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739BAE0EA4038A00D751E1 /* src/jpegtran.c */; }; + 5A739BB80EA4042600D751E1 /* src/transupp.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739BB70EA4042600D751E1 /* src/transupp.c */; }; + 5A739C140EA406A000D751E1 /* src/cdjpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739C130EA406A000D751E1 /* src/cdjpeg.c */; }; + 5A739C1C0EA406F600D751E1 /* src/rdswitch.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739C1B0EA406F600D751E1 /* src/rdswitch.c */; }; 5A8ACE8E111CCCB700EC4491 /* libimageoptimjpeg.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A8ACE8D111CCCB200EC4491 /* libimageoptimjpeg.dylib */; }; /* End PBXBuildFile section */ @@ -32,29 +31,14 @@ }; /* End PBXContainerItemProxy section */ -/* Begin PBXCopyFilesBuildPhase section */ - 5A8594DD1460BCA70044095A /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 12; - dstPath = ""; - dstSubfolderSpec = 16; - files = ( - 5A8594E51460BCC10044095A /* jpegrescan in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 5A27BA26139B08E10095FC2F /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = SOURCE_ROOT; }; 5A27BA27139B08E10095FC2F /* debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = SOURCE_ROOT; }; 5A739BA30EA4034800D751E1 /* jpeg.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = jpeg.xcodeproj; path = ../libjpeg/jpeg.xcodeproj; sourceTree = ""; }; - 5A739BAE0EA4038A00D751E1 /* jpegtran.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jpegtran.c; sourceTree = ""; }; - 5A739BB70EA4042600D751E1 /* transupp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = transupp.c; sourceTree = ""; }; - 5A739C130EA406A000D751E1 /* cdjpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cdjpeg.c; sourceTree = ""; }; - 5A739C1B0EA406F600D751E1 /* rdswitch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rdswitch.c; sourceTree = ""; }; - 5A8594CD1460BB340044095A /* jpegrescan */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = jpegrescan; sourceTree = ""; }; - 5A8594DF1460BCA70044095A /* jpegrescan */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jpegrescan; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A739BAE0EA4038A00D751E1 /* src/jpegtran.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = src/jpegtran.c; sourceTree = ""; }; + 5A739BB70EA4042600D751E1 /* src/transupp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = src/transupp.c; sourceTree = ""; }; + 5A739C130EA406A000D751E1 /* src/cdjpeg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = src/cdjpeg.c; sourceTree = ""; }; + 5A739C1B0EA406F600D751E1 /* src/rdswitch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = src/rdswitch.c; sourceTree = ""; }; 8DD76FB20486AB0100D96B5E /* jpegtran */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jpegtran; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -77,7 +61,6 @@ 08FB7795FE84155DC02AAC07 /* libimageoptimjpeg */, 5A27BA26139B08E10095FC2F /* release.xcconfig */, 5A27BA27139B08E10095FC2F /* debug.xcconfig */, - 5A8594CD1460BB340044095A /* jpegrescan */, 1AB674ADFE9D54B511CA2CBB /* Products */, ); name = jpegtran; @@ -86,10 +69,10 @@ 08FB7795FE84155DC02AAC07 /* libimageoptimjpeg */ = { isa = PBXGroup; children = ( - 5A739C130EA406A000D751E1 /* cdjpeg.c */, - 5A739BAE0EA4038A00D751E1 /* jpegtran.c */, - 5A739C1B0EA406F600D751E1 /* rdswitch.c */, - 5A739BB70EA4042600D751E1 /* transupp.c */, + 5A739C130EA406A000D751E1 /* src/cdjpeg.c */, + 5A739BAE0EA4038A00D751E1 /* src/jpegtran.c */, + 5A739C1B0EA406F600D751E1 /* src/rdswitch.c */, + 5A739BB70EA4042600D751E1 /* src/transupp.c */, ); name = libimageoptimjpeg; path = ../libjpeg; @@ -98,7 +81,6 @@ 1AB674ADFE9D54B511CA2CBB /* Products */ = { isa = PBXGroup; children = ( - 5A8594DF1460BCA70044095A /* jpegrescan */, 8DD76FB20486AB0100D96B5E /* jpegtran */, ); name = Products; @@ -115,21 +97,6 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 5A8594DE1460BCA70044095A /* jpegrescan */ = { - isa = PBXNativeTarget; - buildConfigurationList = 5A8594E21460BCA70044095A /* Build configuration list for PBXNativeTarget "jpegrescan" */; - buildPhases = ( - 5A8594DD1460BCA70044095A /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = jpegrescan; - productName = jpegrescan; - productReference = 5A8594DF1460BCA70044095A /* jpegrescan */; - productType = "com.apple.product-type.tool"; - }; 8DD76FA90486AB0100D96B5E /* jpegtran */ = { isa = PBXNativeTarget; buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "jpegtran" */; @@ -155,17 +122,14 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 0460; + LastUpgradeCheck = 1510; }; buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "jpegtran" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + compatibilityVersion = "Xcode 12.0"; + developmentRegion = en; hasScannedForEncodings = 1; knownRegions = ( - English, - Japanese, - French, - German, + en, ); mainGroup = 08FB7794FE84155DC02AAC07 /* jpegtran */; projectDirPath = ""; @@ -178,7 +142,6 @@ projectRoot = ""; targets = ( 8DD76FA90486AB0100D96B5E /* jpegtran */, - 5A8594DE1460BCA70044095A /* jpegrescan */, ); }; /* End PBXProject section */ @@ -198,10 +161,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A739C140EA406A000D751E1 /* cdjpeg.c in Sources */, - 5A739BAF0EA4038A00D751E1 /* jpegtran.c in Sources */, - 5A739C1C0EA406F600D751E1 /* rdswitch.c in Sources */, - 5A739BB80EA4042600D751E1 /* transupp.c in Sources */, + 5A739C140EA406A000D751E1 /* src/cdjpeg.c in Sources */, + 5A739BAF0EA4038A00D751E1 /* src/jpegtran.c in Sources */, + 5A739C1C0EA406F600D751E1 /* src/rdswitch.c in Sources */, + 5A739BB80EA4042600D751E1 /* src/transupp.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -220,24 +183,24 @@ isa = XCBuildConfiguration; buildSettings = { GCC_DYNAMIC_NO_PIC = NO; - INSTALL_PATH = /usr/local/bin; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)\"", ); PRODUCT_NAME = jpegtran; + SKIP_INSTALL = YES; }; name = Debug; }; 1DEB928708733DD80010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - INSTALL_PATH = /usr/local/bin; LIBRARY_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)\"", ); PRODUCT_NAME = jpegtran; + SKIP_INSTALL = YES; }; name = Release; }; @@ -245,6 +208,9 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27BA27139B08E10095FC2F /* debug.xcconfig */; buildSettings = { + ENABLE_TESTABILITY = YES; + ONLY_ACTIVE_ARCH = YES; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../libjpeg/"; }; name = Debug; }; @@ -252,20 +218,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27BA26139B08E10095FC2F /* release.xcconfig */; buildSettings = { - }; - name = Release; - }; - 5A8594E31460BCA70044095A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - 5A8594E41460BCA70044095A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = "$(TARGET_NAME)"; + USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../libjpeg/"; }; name = Release; }; @@ -290,15 +243,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5A8594E21460BCA70044095A /* Build configuration list for PBXNativeTarget "jpegrescan" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5A8594E31460BCA70044095A /* Debug */, - 5A8594E41460BCA70044095A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; diff --git a/libjpeg/Makefile b/libjpeg/Makefile old mode 100755 new mode 100644 index f4fcd301..285d1258 --- a/libjpeg/Makefile +++ b/libjpeg/Makefile @@ -1,9 +1,8 @@ +build: all -jpeglib.h: - curl http://www.ijg.org/files/jpegsrc.v8.tar.gz | tar xz --strip-components=1 - -patch -p0 -i remove_unused_features.diff - -clean: - -install: - \ No newline at end of file +all: src/jpeglib.h + +src/jpeglib.h: ../.gitmodules + ../scripts/fetch-submodule src && touch src/jpeglib.h + +.PHONY: build all install clean diff --git a/libjpeg/dummy.c b/libjpeg/dummy.c new file mode 100644 index 00000000..de1572b7 --- /dev/null +++ b/libjpeg/dummy.c @@ -0,0 +1,9 @@ +/* stub functions for features that can't be disabled without source modifications */ +void jinit_1pass_quantizer(void) {} +void jinit_merged_upsampler(void) {} +void jpeg_idct_1x1(void) {} +void jpeg_idct_2x2(void) {} +void jpeg_idct_4x4(void) {} +void jinit_2pass_quantizer(void) {} +void jpeg_idct_ifast(void) {} +void jpeg_fdct_ifast(void) {} diff --git a/libjpeg/jconfig.h b/libjpeg/jconfig.h index fe07713f..e370d51c 100644 --- a/libjpeg/jconfig.h +++ b/libjpeg/jconfig.h @@ -1,39 +1,62 @@ -/* jconfig.h. Generated from jconfig.cfg by configure. */ -/* jconfig.cfg --- source file edited by configure script */ -/* see jconfig.txt for explanations */ +/* jconfig.h. Generated from jconfig.h.in by configure. */ +/* Version ID for the JPEG library. + * Might be useful for tests like "#if JPEG_LIB_VERSION >= 60". + */ +#define JPEG_LIB_VERSION 62 -#define HAVE_PROTOTYPES 1 -#define HAVE_UNSIGNED_CHAR 1 -#define HAVE_UNSIGNED_SHORT 1 -/* #undef void */ -/* #undef const */ -/* #undef CHAR_IS_UNSIGNED */ +/* libjpeg-turbo version */ +#define LIBJPEG_TURBO_VERSION 0 + +/* Support arithmetic encoding */ +/* #undef C_ARITH_CODING_SUPPORTED */ + +/* Support arithmetic decoding */ +/* #undef D_ARITH_CODING_SUPPORTED */ + +/* + * Define BITS_IN_JSAMPLE as either + * 8 for 8-bit sample values (the usual setting) + * 12 for 12-bit sample values + * Only 8 and 12 are legal data precisions for lossy JPEG according to the + * JPEG standard, and the IJG code does not support anything else! + * We do not support run-time selection of data precision, sorry. + */ + +#define BITS_IN_JSAMPLE 8 /* use 8 or 12 */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 + +/* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 -/* #undef NEED_BSD_STRINGS */ -/* #undef NEED_SYS_TYPES_H */ -/* #undef NEED_FAR_POINTERS */ -/* #undef NEED_SHORT_EXTERNAL_NAMES */ -/* Define this if you get warnings about undefined structures. */ -/* #undef INCOMPLETE_TYPES_BROKEN */ -#ifdef JPEG_INTERNALS +/* Define to 1 if the system has the type `unsigned char'. */ +#define HAVE_UNSIGNED_CHAR 1 -/* #undef RIGHT_SHIFT_IS_UNSIGNED */ -#define INLINE __inline__ -/* These are for configuring the JPEG memory manager. */ -/* #undef DEFAULT_MAX_MEM */ -/* #undef NO_MKTEMP */ +/* Define to 1 if the system has the type `unsigned short'. */ +#define HAVE_UNSIGNED_SHORT 1 -#endif /* JPEG_INTERNALS */ +/* Compiler does not support pointers to undefined structures. */ +/* #undef INCOMPLETE_TYPES_BROKEN */ -#ifdef JPEG_CJPEG_DJPEG +/* Support in-memory source/destination managers */ +#define MEM_SRCDST_SUPPORTED 1 -/* #undef TWO_FILE_COMMANDLINE */ -/* #undef NEED_SIGNAL_CATCHER */ -/* #undef DONT_USE_B_MODE */ +/* Define if you have BSD-like bzero and bcopy in rather than + memset/memcpy in . */ +/* #undef NEED_BSD_STRINGS */ + +/* Define if you need to include to get size_t. */ +#define NEED_SYS_TYPES_H 1 + +/* Define if your (broken) compiler shifts signed values as if they were + unsigned. */ +/* #undef RIGHT_SHIFT_IS_UNSIGNED */ -/* Define this if you want percent-done progress reports from cjpeg/djpeg. */ -/* #undef PROGRESS_REPORT */ +/* Use accelerated SIMD routines. */ +#define WITH_SIMD 0 -#endif /* JPEG_CJPEG_DJPEG */ +#define SIZEOF_SIZE_T 8 diff --git a/libjpeg/jconfigint.h b/libjpeg/jconfigint.h new file mode 100644 index 00000000..48332ffb --- /dev/null +++ b/libjpeg/jconfigint.h @@ -0,0 +1,20 @@ +/* jconfigint.h. Generated from jconfigint.h.in by configure. */ +/* libjpeg-turbo build number */ +#define BUILD "20231014" + +/* Compiler's inline keyword */ +#undef inline + +/* How to obtain function inlining. */ +#define INLINE __inline__ __attribute__((always_inline)) + +/* How to obtain thread-local storage */ +#define THREAD_LOCAL __thread + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "mozjpeg" + +/* Version number of package */ +#define VERSION "4.1.5" + +#define FALLTHROUGH diff --git a/libjpeg/jpeg.xcodeproj/project.pbxproj b/libjpeg/jpeg.xcodeproj/project.pbxproj index 23db110f..263c9b82 100644 --- a/libjpeg/jpeg.xcodeproj/project.pbxproj +++ b/libjpeg/jpeg.xcodeproj/project.pbxproj @@ -3,143 +3,113 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ - 5A739B410EA4012300D751E1 /* jdmarker.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B110EA4012300D751E1 /* jdmarker.c */; }; - 5A739B420EA4012300D751E1 /* jerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B120EA4012300D751E1 /* jerror.c */; }; - 5A739B430EA4012300D751E1 /* jdpostct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B130EA4012300D751E1 /* jdpostct.c */; }; - 5A739B450EA4012300D751E1 /* jdmerge.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B150EA4012300D751E1 /* jdmerge.c */; }; - 5A739B460EA4012300D751E1 /* jdmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B160EA4012300D751E1 /* jdmaster.c */; }; - 5A739B470EA4012300D751E1 /* jdmainct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B170EA4012300D751E1 /* jdmainct.c */; }; - 5A739B480EA4012300D751E1 /* jdinput.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B180EA4012300D751E1 /* jdinput.c */; }; - 5A739B490EA4012300D751E1 /* jccoefct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B190EA4012300D751E1 /* jccoefct.c */; }; - 5A739B4A0EA4012300D751E1 /* jcapistd.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B1A0EA4012300D751E1 /* jcapistd.c */; }; - 5A739B4B0EA4012300D751E1 /* jcmainct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B1B0EA4012300D751E1 /* jcmainct.c */; }; - 5A739B4C0EA4012300D751E1 /* jcinit.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B1C0EA4012300D751E1 /* jcinit.c */; }; - 5A739B4D0EA4012300D751E1 /* jctrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B1D0EA4012300D751E1 /* jctrans.c */; }; - 5A739B4E0EA4012300D751E1 /* jcsample.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B1E0EA4012300D751E1 /* jcsample.c */; }; - 5A739B4F0EA4012300D751E1 /* jquant1.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B1F0EA4012300D751E1 /* jquant1.c */; }; - 5A739B500EA4012300D751E1 /* jdhuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B200EA4012300D751E1 /* jdhuff.c */; }; - 5A739B510EA4012300D751E1 /* jutils.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B210EA4012300D751E1 /* jutils.c */; }; - 5A739B520EA4012300D751E1 /* jquant2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B220EA4012300D751E1 /* jquant2.c */; }; - 5A739B530EA4012300D751E1 /* jidctint.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B230EA4012300D751E1 /* jidctint.c */; }; - 5A739B540EA4012300D751E1 /* jidctfst.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B240EA4012300D751E1 /* jidctfst.c */; }; - 5A739B550EA4012300D751E1 /* jchuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B250EA4012300D751E1 /* jchuff.c */; }; - 5A739B560EA4012300D751E1 /* jcmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B260EA4012300D751E1 /* jcmaster.c */; }; - 5A739B570EA4012300D751E1 /* jcmarker.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B270EA4012300D751E1 /* jcmarker.c */; }; - 5A739B580EA4012300D751E1 /* jdatasrc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B280EA4012300D751E1 /* jdatasrc.c */; }; - 5A739B590EA4012300D751E1 /* jdatadst.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B290EA4012300D751E1 /* jdatadst.c */; }; - 5A739B5A0EA4012300D751E1 /* jcomapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B2A0EA4012300D751E1 /* jcomapi.c */; }; - 5A739B5B0EA4012300D751E1 /* jidctflt.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B2B0EA4012300D751E1 /* jidctflt.c */; }; - 5A739B5C0EA4012300D751E1 /* jfdctint.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B2C0EA4012300D751E1 /* jfdctint.c */; }; - 5A739B5D0EA4012300D751E1 /* jcparam.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B2D0EA4012300D751E1 /* jcparam.c */; }; - 5A739B5E0EA4012300D751E1 /* jfdctfst.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B2E0EA4012300D751E1 /* jfdctfst.c */; }; - 5A739B5F0EA4012300D751E1 /* jfdctflt.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B2F0EA4012300D751E1 /* jfdctflt.c */; }; - 5A739B600EA4012300D751E1 /* jccolor.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B300EA4012300D751E1 /* jccolor.c */; }; - 5A739B610EA4012300D751E1 /* jmemsys.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739B310EA4012300D751E1 /* jmemsys.h */; }; - 5A739B620EA4012300D751E1 /* jcapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B320EA4012300D751E1 /* jcapimin.c */; }; - 5A739B630EA4012300D751E1 /* jdapistd.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B330EA4012300D751E1 /* jdapistd.c */; }; - 5A739B640EA4012300D751E1 /* jdapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B340EA4012300D751E1 /* jdapimin.c */; }; - 5A739B650EA4012300D751E1 /* jcprepct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B350EA4012300D751E1 /* jcprepct.c */; }; - 5A739B670EA4012300D751E1 /* jmemansi.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B370EA4012300D751E1 /* jmemansi.c */; }; - 5A739B680EA4012300D751E1 /* jdtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B380EA4012300D751E1 /* jdtrans.c */; }; - 5A739B690EA4012300D751E1 /* jdsample.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B390EA4012300D751E1 /* jdsample.c */; }; - 5A739B6A0EA4012300D751E1 /* jdcolor.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B3A0EA4012300D751E1 /* jdcolor.c */; }; - 5A739B6B0EA4012300D751E1 /* jdcoefct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B3B0EA4012300D751E1 /* jdcoefct.c */; }; - 5A739B6C0EA4012300D751E1 /* jddctmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B3C0EA4012300D751E1 /* jddctmgr.c */; }; - 5A739B6D0EA4012300D751E1 /* jcdctmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B3D0EA4012300D751E1 /* jcdctmgr.c */; }; - 5A739B6F0EA4012300D751E1 /* jmemmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A739B3F0EA4012300D751E1 /* jmemmgr.c */; }; - 5A739B700EA4012300D751E1 /* jpeglib.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739B400EA4012300D751E1 /* jpeglib.h */; }; - 5A739BE20EA4050000D751E1 /* jmorecfg.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BD40EA4050000D751E1 /* jmorecfg.h */; }; - 5A739BE50EA4050000D751E1 /* jconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BD70EA4050000D751E1 /* jconfig.h */; }; - 5A739BE70EA4050000D751E1 /* jerror.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BD90EA4050000D751E1 /* jerror.h */; }; - 5A739BE80EA4050000D751E1 /* jinclude.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BDA0EA4050000D751E1 /* jinclude.h */; }; - 5A739BE90EA4050000D751E1 /* jversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BDB0EA4050000D751E1 /* jversion.h */; }; - 5A739BEA0EA4050000D751E1 /* jpegint.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BDC0EA4050000D751E1 /* jpegint.h */; }; - 5A739BEB0EA4050000D751E1 /* transupp.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BDD0EA4050000D751E1 /* transupp.h */; }; - 5A739BED0EA4050000D751E1 /* cdjpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BDF0EA4050000D751E1 /* cdjpeg.h */; }; - 5A739BEE0EA4050000D751E1 /* jdct.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BE00EA4050000D751E1 /* jdct.h */; }; - 5A739BEF0EA4050000D751E1 /* cderror.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A739BE10EA4050000D751E1 /* cderror.h */; }; - 5A7C06FA111CC8D20025045A /* jdarith.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A7C06F9111CC8D20025045A /* jdarith.c */; }; - 5A7C06FE111CC8DE0025045A /* jcarith.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A7C06FD111CC8DE0025045A /* jcarith.c */; }; - 5A7C0702111CC8FB0025045A /* jaricom.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A7C0701111CC8FB0025045A /* jaricom.c */; }; + 5A00EF061B4F384C00B5EBA7 /* jsimd_none.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A00EF051B4F384C00B5EBA7 /* jsimd_none.c */; }; + 5A00EF0A1B4F393C00B5EBA7 /* jidctflt.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A00EF091B4F393C00B5EBA7 /* jidctflt.c */; }; + 5A00EF0C1B4F395800B5EBA7 /* jchuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A00EF0B1B4F395800B5EBA7 /* jchuff.c */; }; + 5A00EF0E1B4F396C00B5EBA7 /* jdatadst.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A00EF0D1B4F396C00B5EBA7 /* jdatadst.c */; }; + 5A00EF101B4F398400B5EBA7 /* jcdctmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A00EF0F1B4F398400B5EBA7 /* jcdctmgr.c */; }; + 5A00EF121B4F399A00B5EBA7 /* jfdctflt.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A00EF111B4F399A00B5EBA7 /* jfdctflt.c */; }; + 5A00EF141B4F39BB00B5EBA7 /* jfdctint.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A00EF131B4F39BB00B5EBA7 /* jfdctint.c */; }; + 5A0C76FF1B4F3B7200845D19 /* jcparam.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C76FE1B4F3B7200845D19 /* jcparam.c */; }; + 5A0C77011B4F3B9300845D19 /* jcext.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77001B4F3B9300845D19 /* jcext.c */; }; + 5A0C77031B4F3BA500845D19 /* jdapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77021B4F3BA500845D19 /* jdapimin.c */; }; + 5A0C77051B4F3BD500845D19 /* jdinput.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77041B4F3BD500845D19 /* jdinput.c */; }; + 5A0C77071B4F3BFB00845D19 /* jctrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77061B4F3BFB00845D19 /* jctrans.c */; }; + 5A0C77091B4F3C0800845D19 /* jdatasrc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77081B4F3C0800845D19 /* jdatasrc.c */; }; + 5A0C770B1B4F3C1C00845D19 /* jerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C770A1B4F3C1C00845D19 /* jerror.c */; }; + 5A0C770D1B4F3C4400845D19 /* jcphuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C770C1B4F3C4400845D19 /* jcphuff.c */; }; + 5A0C770F1B4F3C6D00845D19 /* jdtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C770E1B4F3C6D00845D19 /* jdtrans.c */; }; + 5A0C77111B4F3CD100845D19 /* jcapistd.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77101B4F3CD100845D19 /* jcapistd.c */; }; + 5A0C77151B4F3D1200845D19 /* jcinit.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77141B4F3D1200845D19 /* jcinit.c */; }; + 5A0C77171B4F3D3400845D19 /* jcmainct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77161B4F3D3400845D19 /* jcmainct.c */; }; + 5A0C77191B4F3D5800845D19 /* jcprepct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0C77181B4F3D5800845D19 /* jcprepct.c */; }; + 5A0D41ED1B4F35BF005A19B0 /* jcmarker.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41E81B4F35BF005A19B0 /* jcmarker.c */; }; + 5A0D41EE1B4F35BF005A19B0 /* jdapistd.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41E91B4F35BF005A19B0 /* jdapistd.c */; }; + 5A0D41EF1B4F35BF005A19B0 /* jddctmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41EA1B4F35BF005A19B0 /* jddctmgr.c */; }; + 5A0D41F01B4F35BF005A19B0 /* jdhuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41EB1B4F35BF005A19B0 /* jdhuff.c */; }; + 5A0D41F21B4F35E3005A19B0 /* jdmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41F11B4F35E3005A19B0 /* jdmaster.c */; }; + 5A0D41F41B4F3600005A19B0 /* jutils.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41F31B4F3600005A19B0 /* jutils.c */; }; + 5A0D41F71B4F3629005A19B0 /* jdmarker.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41F51B4F3629005A19B0 /* jdmarker.c */; }; + 5A0D41F81B4F3629005A19B0 /* jmemmgr.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41F61B4F3629005A19B0 /* jmemmgr.c */; }; + 5A0D41FA1B4F3688005A19B0 /* jccolor.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41F91B4F3688005A19B0 /* jccolor.c */; }; + 5A0D41FC1B4F3691005A19B0 /* jdcolor.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41FB1B4F3691005A19B0 /* jdcolor.c */; }; + 5A0D41FE1B4F36A7005A19B0 /* jdcoefct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41FD1B4F36A7005A19B0 /* jdcoefct.c */; }; + 5A0D42001B4F36AC005A19B0 /* jccoefct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D41FF1B4F36AC005A19B0 /* jccoefct.c */; }; + 5A0D42021B4F36F4005A19B0 /* jcmaster.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D42011B4F36F4005A19B0 /* jcmaster.c */; }; + 5A0D42041B4F3728005A19B0 /* jdmainct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D42031B4F3728005A19B0 /* jdmainct.c */; }; + 5A0D42061B4F3748005A19B0 /* jdpostct.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D42051B4F3748005A19B0 /* jdpostct.c */; }; + 5A0D42081B4F375C005A19B0 /* jdphuff.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D42071B4F375C005A19B0 /* jdphuff.c */; }; + 5A0D420A1B4F3781005A19B0 /* jdsample.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D42091B4F3781005A19B0 /* jdsample.c */; }; + 5A0D420C1B4F3789005A19B0 /* jcsample.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D420B1B4F3789005A19B0 /* jcsample.c */; }; + 5A0D420E1B4F37B4005A19B0 /* jcapimin.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D420D1B4F37B4005A19B0 /* jcapimin.c */; }; + 5A0D42101B4F37C8005A19B0 /* jcomapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D420F1B4F37C8005A19B0 /* jcomapi.c */; }; + 5A0D42121B4F37DC005A19B0 /* jmemnobs.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D42111B4F37DC005A19B0 /* jmemnobs.c */; }; + 5A0D42141B4F37EF005A19B0 /* jidctint.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A0D42131B4F37EF005A19B0 /* jidctint.c */; }; + 5A582E031B52EA11007F6FD5 /* dummy.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A582E021B52EA11007F6FD5 /* dummy.c */; }; + 5F4975D52ADB4E68005AF7D4 /* jcicc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5F4975D42ADB4E68005AF7D4 /* jcicc.c */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 5A20CCB8112394F80000400D /* PBXContainerItemProxy */ = { + 5AB114FF1B52B12300A3C73A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5A20CCB3112394F20000400D; + remoteGlobalIDString = 5AB114FB1B52B11A00A3C73A; remoteInfo = download; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 5A00EF051B4F384C00B5EBA7 /* jsimd_none.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jsimd_none.c; path = src/jsimd_none.c; sourceTree = ""; }; + 5A00EF091B4F393C00B5EBA7 /* jidctflt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctflt.c; path = src/jidctflt.c; sourceTree = ""; }; + 5A00EF0B1B4F395800B5EBA7 /* jchuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jchuff.c; path = src/jchuff.c; sourceTree = ""; }; + 5A00EF0D1B4F396C00B5EBA7 /* jdatadst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdatadst.c; path = src/jdatadst.c; sourceTree = ""; }; + 5A00EF0F1B4F398400B5EBA7 /* jcdctmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcdctmgr.c; path = src/jcdctmgr.c; sourceTree = ""; }; + 5A00EF111B4F399A00B5EBA7 /* jfdctflt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jfdctflt.c; path = src/jfdctflt.c; sourceTree = ""; }; + 5A00EF131B4F39BB00B5EBA7 /* jfdctint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jfdctint.c; path = src/jfdctint.c; sourceTree = ""; }; + 5A0C76FE1B4F3B7200845D19 /* jcparam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcparam.c; path = src/jcparam.c; sourceTree = ""; }; + 5A0C77001B4F3B9300845D19 /* jcext.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcext.c; path = src/jcext.c; sourceTree = ""; }; + 5A0C77021B4F3BA500845D19 /* jdapimin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdapimin.c; path = src/jdapimin.c; sourceTree = ""; }; + 5A0C77041B4F3BD500845D19 /* jdinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdinput.c; path = src/jdinput.c; sourceTree = ""; }; + 5A0C77061B4F3BFB00845D19 /* jctrans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jctrans.c; path = src/jctrans.c; sourceTree = ""; }; + 5A0C77081B4F3C0800845D19 /* jdatasrc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdatasrc.c; path = src/jdatasrc.c; sourceTree = ""; }; + 5A0C770A1B4F3C1C00845D19 /* jerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jerror.c; path = src/jerror.c; sourceTree = ""; }; + 5A0C770C1B4F3C4400845D19 /* jcphuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcphuff.c; path = src/jcphuff.c; sourceTree = ""; }; + 5A0C770E1B4F3C6D00845D19 /* jdtrans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdtrans.c; path = src/jdtrans.c; sourceTree = ""; }; + 5A0C77101B4F3CD100845D19 /* jcapistd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcapistd.c; path = src/jcapistd.c; sourceTree = ""; }; + 5A0C77141B4F3D1200845D19 /* jcinit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcinit.c; path = src/jcinit.c; sourceTree = ""; }; + 5A0C77161B4F3D3400845D19 /* jcmainct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcmainct.c; path = src/jcmainct.c; sourceTree = ""; }; + 5A0C77181B4F3D5800845D19 /* jcprepct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcprepct.c; path = src/jcprepct.c; sourceTree = ""; }; + 5A0D41E81B4F35BF005A19B0 /* jcmarker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcmarker.c; path = src/jcmarker.c; sourceTree = ""; }; + 5A0D41E91B4F35BF005A19B0 /* jdapistd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdapistd.c; path = src/jdapistd.c; sourceTree = ""; }; + 5A0D41EA1B4F35BF005A19B0 /* jddctmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jddctmgr.c; path = src/jddctmgr.c; sourceTree = ""; }; + 5A0D41EB1B4F35BF005A19B0 /* jdhuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdhuff.c; path = src/jdhuff.c; sourceTree = ""; }; + 5A0D41F11B4F35E3005A19B0 /* jdmaster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdmaster.c; path = src/jdmaster.c; sourceTree = ""; }; + 5A0D41F31B4F3600005A19B0 /* jutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jutils.c; path = src/jutils.c; sourceTree = ""; }; + 5A0D41F51B4F3629005A19B0 /* jdmarker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdmarker.c; path = src/jdmarker.c; sourceTree = ""; }; + 5A0D41F61B4F3629005A19B0 /* jmemmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jmemmgr.c; path = src/jmemmgr.c; sourceTree = ""; }; + 5A0D41F91B4F3688005A19B0 /* jccolor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jccolor.c; path = src/jccolor.c; sourceTree = ""; }; + 5A0D41FB1B4F3691005A19B0 /* jdcolor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdcolor.c; path = src/jdcolor.c; sourceTree = ""; }; + 5A0D41FD1B4F36A7005A19B0 /* jdcoefct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdcoefct.c; path = src/jdcoefct.c; sourceTree = ""; }; + 5A0D41FF1B4F36AC005A19B0 /* jccoefct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jccoefct.c; path = src/jccoefct.c; sourceTree = ""; }; + 5A0D42011B4F36F4005A19B0 /* jcmaster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcmaster.c; path = src/jcmaster.c; sourceTree = ""; }; + 5A0D42031B4F3728005A19B0 /* jdmainct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdmainct.c; path = src/jdmainct.c; sourceTree = ""; }; + 5A0D42051B4F3748005A19B0 /* jdpostct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdpostct.c; path = src/jdpostct.c; sourceTree = ""; }; + 5A0D42071B4F375C005A19B0 /* jdphuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdphuff.c; path = src/jdphuff.c; sourceTree = ""; }; + 5A0D42091B4F3781005A19B0 /* jdsample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jdsample.c; path = src/jdsample.c; sourceTree = ""; }; + 5A0D420B1B4F3789005A19B0 /* jcsample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcsample.c; path = src/jcsample.c; sourceTree = ""; }; + 5A0D420D1B4F37B4005A19B0 /* jcapimin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcapimin.c; path = src/jcapimin.c; sourceTree = ""; }; + 5A0D420F1B4F37C8005A19B0 /* jcomapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jcomapi.c; path = src/jcomapi.c; sourceTree = ""; }; + 5A0D42111B4F37DC005A19B0 /* jmemnobs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jmemnobs.c; path = src/jmemnobs.c; sourceTree = ""; }; + 5A0D42131B4F37EF005A19B0 /* jidctint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = jidctint.c; path = src/jidctint.c; sourceTree = ""; }; 5A27B9E5139B08640095FC2F /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = SOURCE_ROOT; }; 5A27B9E6139B08640095FC2F /* debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = SOURCE_ROOT; }; - 5A739B110EA4012300D751E1 /* jdmarker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdmarker.c; sourceTree = ""; }; - 5A739B120EA4012300D751E1 /* jerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jerror.c; sourceTree = ""; }; - 5A739B130EA4012300D751E1 /* jdpostct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdpostct.c; sourceTree = ""; }; - 5A739B150EA4012300D751E1 /* jdmerge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdmerge.c; sourceTree = ""; }; - 5A739B160EA4012300D751E1 /* jdmaster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdmaster.c; sourceTree = ""; }; - 5A739B170EA4012300D751E1 /* jdmainct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdmainct.c; sourceTree = ""; }; - 5A739B180EA4012300D751E1 /* jdinput.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdinput.c; sourceTree = ""; }; - 5A739B190EA4012300D751E1 /* jccoefct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jccoefct.c; sourceTree = ""; }; - 5A739B1A0EA4012300D751E1 /* jcapistd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcapistd.c; sourceTree = ""; }; - 5A739B1B0EA4012300D751E1 /* jcmainct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcmainct.c; sourceTree = ""; }; - 5A739B1C0EA4012300D751E1 /* jcinit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcinit.c; sourceTree = ""; }; - 5A739B1D0EA4012300D751E1 /* jctrans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jctrans.c; sourceTree = ""; }; - 5A739B1E0EA4012300D751E1 /* jcsample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcsample.c; sourceTree = ""; }; - 5A739B1F0EA4012300D751E1 /* jquant1.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jquant1.c; sourceTree = ""; }; - 5A739B200EA4012300D751E1 /* jdhuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdhuff.c; sourceTree = ""; }; - 5A739B210EA4012300D751E1 /* jutils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jutils.c; sourceTree = ""; }; - 5A739B220EA4012300D751E1 /* jquant2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jquant2.c; sourceTree = ""; }; - 5A739B230EA4012300D751E1 /* jidctint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jidctint.c; sourceTree = ""; }; - 5A739B240EA4012300D751E1 /* jidctfst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jidctfst.c; sourceTree = ""; }; - 5A739B250EA4012300D751E1 /* jchuff.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jchuff.c; sourceTree = ""; }; - 5A739B260EA4012300D751E1 /* jcmaster.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcmaster.c; sourceTree = ""; }; - 5A739B270EA4012300D751E1 /* jcmarker.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcmarker.c; sourceTree = ""; }; - 5A739B280EA4012300D751E1 /* jdatasrc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdatasrc.c; sourceTree = ""; }; - 5A739B290EA4012300D751E1 /* jdatadst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdatadst.c; sourceTree = ""; }; - 5A739B2A0EA4012300D751E1 /* jcomapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcomapi.c; sourceTree = ""; }; - 5A739B2B0EA4012300D751E1 /* jidctflt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jidctflt.c; sourceTree = ""; }; - 5A739B2C0EA4012300D751E1 /* jfdctint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jfdctint.c; sourceTree = ""; }; - 5A739B2D0EA4012300D751E1 /* jcparam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcparam.c; sourceTree = ""; }; - 5A739B2E0EA4012300D751E1 /* jfdctfst.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jfdctfst.c; sourceTree = ""; }; - 5A739B2F0EA4012300D751E1 /* jfdctflt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jfdctflt.c; sourceTree = ""; }; - 5A739B300EA4012300D751E1 /* jccolor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jccolor.c; sourceTree = ""; }; - 5A739B310EA4012300D751E1 /* jmemsys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jmemsys.h; sourceTree = ""; }; - 5A739B320EA4012300D751E1 /* jcapimin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcapimin.c; sourceTree = ""; }; - 5A739B330EA4012300D751E1 /* jdapistd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdapistd.c; sourceTree = ""; }; - 5A739B340EA4012300D751E1 /* jdapimin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdapimin.c; sourceTree = ""; }; - 5A739B350EA4012300D751E1 /* jcprepct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcprepct.c; sourceTree = ""; }; - 5A739B370EA4012300D751E1 /* jmemansi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jmemansi.c; sourceTree = ""; }; - 5A739B380EA4012300D751E1 /* jdtrans.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdtrans.c; sourceTree = ""; }; - 5A739B390EA4012300D751E1 /* jdsample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdsample.c; sourceTree = ""; }; - 5A739B3A0EA4012300D751E1 /* jdcolor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdcolor.c; sourceTree = ""; }; - 5A739B3B0EA4012300D751E1 /* jdcoefct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdcoefct.c; sourceTree = ""; }; - 5A739B3C0EA4012300D751E1 /* jddctmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jddctmgr.c; sourceTree = ""; }; - 5A739B3D0EA4012300D751E1 /* jcdctmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcdctmgr.c; sourceTree = ""; }; - 5A739B3F0EA4012300D751E1 /* jmemmgr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jmemmgr.c; sourceTree = ""; }; - 5A739B400EA4012300D751E1 /* jpeglib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpeglib.h; sourceTree = ""; }; - 5A739BD40EA4050000D751E1 /* jmorecfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jmorecfg.h; sourceTree = ""; }; - 5A739BD50EA4050000D751E1 /* jpeglib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpeglib.h; sourceTree = ""; }; - 5A739BD70EA4050000D751E1 /* jconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jconfig.h; sourceTree = ""; }; - 5A739BD80EA4050000D751E1 /* jmemsys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jmemsys.h; sourceTree = ""; }; - 5A739BD90EA4050000D751E1 /* jerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jerror.h; sourceTree = ""; }; - 5A739BDA0EA4050000D751E1 /* jinclude.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jinclude.h; sourceTree = ""; }; - 5A739BDB0EA4050000D751E1 /* jversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jversion.h; sourceTree = ""; }; - 5A739BDC0EA4050000D751E1 /* jpegint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jpegint.h; sourceTree = ""; }; - 5A739BDD0EA4050000D751E1 /* transupp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transupp.h; sourceTree = ""; }; - 5A739BDF0EA4050000D751E1 /* cdjpeg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cdjpeg.h; sourceTree = ""; }; - 5A739BE00EA4050000D751E1 /* jdct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jdct.h; sourceTree = ""; }; - 5A739BE10EA4050000D751E1 /* cderror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cderror.h; sourceTree = ""; }; - 5A7C06F9111CC8D20025045A /* jdarith.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jdarith.c; sourceTree = ""; }; - 5A7C06FD111CC8DE0025045A /* jcarith.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jcarith.c; sourceTree = ""; }; - 5A7C0701111CC8FB0025045A /* jaricom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = jaricom.c; sourceTree = ""; }; + 5A582E021B52EA11007F6FD5 /* dummy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dummy.c; sourceTree = ""; }; + 5F4975D42ADB4E68005AF7D4 /* jcicc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = jcicc.c; path = src/jcicc.c; sourceTree = ""; }; D2AAC0630554660B00DB518D /* libimageoptimjpeg.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libimageoptimjpeg.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -157,6 +127,8 @@ 08FB7794FE84155DC02AAC07 /* jpeg */ = { isa = PBXGroup; children = ( + 5F4975D42ADB4E68005AF7D4 /* jcicc.c */, + 5A582E021B52EA11007F6FD5 /* dummy.c */, 08FB7795FE84155DC02AAC07 /* Source */, 5A27B9E5139B08640095FC2F /* release.xcconfig */, 5A27B9E6139B08640095FC2F /* debug.xcconfig */, @@ -168,7 +140,48 @@ 08FB7795FE84155DC02AAC07 /* Source */ = { isa = PBXGroup; children = ( - 5A739B100EA4012300D751E1 /* jpeg-6b */, + 5A0D420D1B4F37B4005A19B0 /* jcapimin.c */, + 5A0C77101B4F3CD100845D19 /* jcapistd.c */, + 5A0D41FF1B4F36AC005A19B0 /* jccoefct.c */, + 5A0D41F91B4F3688005A19B0 /* jccolor.c */, + 5A00EF0F1B4F398400B5EBA7 /* jcdctmgr.c */, + 5A0C77001B4F3B9300845D19 /* jcext.c */, + 5A00EF0B1B4F395800B5EBA7 /* jchuff.c */, + 5A0C77141B4F3D1200845D19 /* jcinit.c */, + 5A0C77161B4F3D3400845D19 /* jcmainct.c */, + 5A0D41E81B4F35BF005A19B0 /* jcmarker.c */, + 5A0D42011B4F36F4005A19B0 /* jcmaster.c */, + 5A0D420F1B4F37C8005A19B0 /* jcomapi.c */, + 5A0C76FE1B4F3B7200845D19 /* jcparam.c */, + 5A0C770C1B4F3C4400845D19 /* jcphuff.c */, + 5A0C77181B4F3D5800845D19 /* jcprepct.c */, + 5A0D420B1B4F3789005A19B0 /* jcsample.c */, + 5A0C77061B4F3BFB00845D19 /* jctrans.c */, + 5A0C77021B4F3BA500845D19 /* jdapimin.c */, + 5A0D41E91B4F35BF005A19B0 /* jdapistd.c */, + 5A00EF0D1B4F396C00B5EBA7 /* jdatadst.c */, + 5A0C77081B4F3C0800845D19 /* jdatasrc.c */, + 5A0D41FD1B4F36A7005A19B0 /* jdcoefct.c */, + 5A0D41FB1B4F3691005A19B0 /* jdcolor.c */, + 5A0D41EA1B4F35BF005A19B0 /* jddctmgr.c */, + 5A0D41EB1B4F35BF005A19B0 /* jdhuff.c */, + 5A0C77041B4F3BD500845D19 /* jdinput.c */, + 5A0D42031B4F3728005A19B0 /* jdmainct.c */, + 5A0D41F51B4F3629005A19B0 /* jdmarker.c */, + 5A0D41F11B4F35E3005A19B0 /* jdmaster.c */, + 5A0D42071B4F375C005A19B0 /* jdphuff.c */, + 5A0D42051B4F3748005A19B0 /* jdpostct.c */, + 5A0D42091B4F3781005A19B0 /* jdsample.c */, + 5A0C770E1B4F3C6D00845D19 /* jdtrans.c */, + 5A0C770A1B4F3C1C00845D19 /* jerror.c */, + 5A00EF111B4F399A00B5EBA7 /* jfdctflt.c */, + 5A00EF131B4F39BB00B5EBA7 /* jfdctint.c */, + 5A00EF091B4F393C00B5EBA7 /* jidctflt.c */, + 5A0D42131B4F37EF005A19B0 /* jidctint.c */, + 5A0D41F61B4F3629005A19B0 /* jmemmgr.c */, + 5A0D42111B4F37DC005A19B0 /* jmemnobs.c */, + 5A00EF051B4F384C00B5EBA7 /* jsimd_none.c */, + 5A0D41F31B4F3600005A19B0 /* jutils.c */, ); name = Source; sourceTree = ""; @@ -181,73 +194,6 @@ name = Products; sourceTree = ""; }; - 5A739B100EA4012300D751E1 /* jpeg-6b */ = { - isa = PBXGroup; - children = ( - 5A739BE10EA4050000D751E1 /* cderror.h */, - 5A739BDF0EA4050000D751E1 /* cdjpeg.h */, - 5A7C0701111CC8FB0025045A /* jaricom.c */, - 5A739B320EA4012300D751E1 /* jcapimin.c */, - 5A739B1A0EA4012300D751E1 /* jcapistd.c */, - 5A7C06FD111CC8DE0025045A /* jcarith.c */, - 5A739B190EA4012300D751E1 /* jccoefct.c */, - 5A739B300EA4012300D751E1 /* jccolor.c */, - 5A739B3D0EA4012300D751E1 /* jcdctmgr.c */, - 5A739B250EA4012300D751E1 /* jchuff.c */, - 5A739B1C0EA4012300D751E1 /* jcinit.c */, - 5A739B1B0EA4012300D751E1 /* jcmainct.c */, - 5A739B270EA4012300D751E1 /* jcmarker.c */, - 5A739B260EA4012300D751E1 /* jcmaster.c */, - 5A739B2A0EA4012300D751E1 /* jcomapi.c */, - 5A739BD70EA4050000D751E1 /* jconfig.h */, - 5A739B2D0EA4012300D751E1 /* jcparam.c */, - 5A739B350EA4012300D751E1 /* jcprepct.c */, - 5A739B1E0EA4012300D751E1 /* jcsample.c */, - 5A739B1D0EA4012300D751E1 /* jctrans.c */, - 5A739B340EA4012300D751E1 /* jdapimin.c */, - 5A739B330EA4012300D751E1 /* jdapistd.c */, - 5A7C06F9111CC8D20025045A /* jdarith.c */, - 5A739B290EA4012300D751E1 /* jdatadst.c */, - 5A739B280EA4012300D751E1 /* jdatasrc.c */, - 5A739B3B0EA4012300D751E1 /* jdcoefct.c */, - 5A739B3A0EA4012300D751E1 /* jdcolor.c */, - 5A739BE00EA4050000D751E1 /* jdct.h */, - 5A739B3C0EA4012300D751E1 /* jddctmgr.c */, - 5A739B200EA4012300D751E1 /* jdhuff.c */, - 5A739B180EA4012300D751E1 /* jdinput.c */, - 5A739B170EA4012300D751E1 /* jdmainct.c */, - 5A739B110EA4012300D751E1 /* jdmarker.c */, - 5A739B160EA4012300D751E1 /* jdmaster.c */, - 5A739B150EA4012300D751E1 /* jdmerge.c */, - 5A739B130EA4012300D751E1 /* jdpostct.c */, - 5A739B390EA4012300D751E1 /* jdsample.c */, - 5A739B380EA4012300D751E1 /* jdtrans.c */, - 5A739B120EA4012300D751E1 /* jerror.c */, - 5A739BD90EA4050000D751E1 /* jerror.h */, - 5A739B2F0EA4012300D751E1 /* jfdctflt.c */, - 5A739B2E0EA4012300D751E1 /* jfdctfst.c */, - 5A739B2C0EA4012300D751E1 /* jfdctint.c */, - 5A739B2B0EA4012300D751E1 /* jidctflt.c */, - 5A739B240EA4012300D751E1 /* jidctfst.c */, - 5A739B230EA4012300D751E1 /* jidctint.c */, - 5A739BDA0EA4050000D751E1 /* jinclude.h */, - 5A739B370EA4012300D751E1 /* jmemansi.c */, - 5A739B3F0EA4012300D751E1 /* jmemmgr.c */, - 5A739BD80EA4050000D751E1 /* jmemsys.h */, - 5A739B310EA4012300D751E1 /* jmemsys.h */, - 5A739BD40EA4050000D751E1 /* jmorecfg.h */, - 5A739BDC0EA4050000D751E1 /* jpegint.h */, - 5A739BD50EA4050000D751E1 /* jpeglib.h */, - 5A739B400EA4012300D751E1 /* jpeglib.h */, - 5A739B1F0EA4012300D751E1 /* jquant1.c */, - 5A739B220EA4012300D751E1 /* jquant2.c */, - 5A739B210EA4012300D751E1 /* jutils.c */, - 5A739BDB0EA4050000D751E1 /* jversion.h */, - 5A739BDD0EA4050000D751E1 /* transupp.h */, - ); - name = "jpeg-6b"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -255,28 +201,16 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 5A739BEF0EA4050000D751E1 /* cderror.h in Headers */, - 5A739BED0EA4050000D751E1 /* cdjpeg.h in Headers */, - 5A739BE50EA4050000D751E1 /* jconfig.h in Headers */, - 5A739BEE0EA4050000D751E1 /* jdct.h in Headers */, - 5A739BE70EA4050000D751E1 /* jerror.h in Headers */, - 5A739BE80EA4050000D751E1 /* jinclude.h in Headers */, - 5A739B610EA4012300D751E1 /* jmemsys.h in Headers */, - 5A739BE20EA4050000D751E1 /* jmorecfg.h in Headers */, - 5A739BEA0EA4050000D751E1 /* jpegint.h in Headers */, - 5A739B700EA4012300D751E1 /* jpeglib.h in Headers */, - 5A739BE90EA4050000D751E1 /* jversion.h in Headers */, - 5A739BEB0EA4050000D751E1 /* transupp.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXLegacyTarget section */ - 5A20CCB3112394F20000400D /* download */ = { + 5AB114FB1B52B11A00A3C73A /* download */ = { isa = PBXLegacyTarget; buildArgumentsString = "$(ACTION)"; - buildConfigurationList = 5A20CCC2112395100000400D /* Build configuration list for PBXLegacyTarget "download" */; + buildConfigurationList = 5AB114FE1B52B11A00A3C73A /* Build configuration list for PBXLegacyTarget "download" */; buildPhases = ( ); buildToolPath = /usr/bin/make; @@ -300,7 +234,7 @@ buildRules = ( ); dependencies = ( - 5A20CCB9112394F80000400D /* PBXTargetDependency */, + 5AB115001B52B12300A3C73A /* PBXTargetDependency */, ); name = jpeg; productName = jpeg; @@ -313,24 +247,24 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + TargetAttributes = { + 5AB114FB1B52B11A00A3C73A = { + CreatedOnToolsVersion = 7.0; + }; + }; }; buildConfigurationList = 1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "jpeg" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 12.0"; developmentRegion = English; hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); mainGroup = 08FB7794FE84155DC02AAC07 /* jpeg */; projectDirPath = ""; projectRoot = ""; targets = ( D2AAC0620554660B00DB518D /* jpeg */, - 5A20CCB3112394F20000400D /* download */, + 5AB114FB1B52B11A00A3C73A /* download */, ); }; /* End PBXProject section */ @@ -340,62 +274,60 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5A7C0702111CC8FB0025045A /* jaricom.c in Sources */, - 5A739B620EA4012300D751E1 /* jcapimin.c in Sources */, - 5A739B4A0EA4012300D751E1 /* jcapistd.c in Sources */, - 5A7C06FE111CC8DE0025045A /* jcarith.c in Sources */, - 5A739B490EA4012300D751E1 /* jccoefct.c in Sources */, - 5A739B600EA4012300D751E1 /* jccolor.c in Sources */, - 5A739B6D0EA4012300D751E1 /* jcdctmgr.c in Sources */, - 5A739B550EA4012300D751E1 /* jchuff.c in Sources */, - 5A739B4C0EA4012300D751E1 /* jcinit.c in Sources */, - 5A739B4B0EA4012300D751E1 /* jcmainct.c in Sources */, - 5A739B570EA4012300D751E1 /* jcmarker.c in Sources */, - 5A739B560EA4012300D751E1 /* jcmaster.c in Sources */, - 5A739B5A0EA4012300D751E1 /* jcomapi.c in Sources */, - 5A739B5D0EA4012300D751E1 /* jcparam.c in Sources */, - 5A739B650EA4012300D751E1 /* jcprepct.c in Sources */, - 5A739B4E0EA4012300D751E1 /* jcsample.c in Sources */, - 5A739B4D0EA4012300D751E1 /* jctrans.c in Sources */, - 5A739B640EA4012300D751E1 /* jdapimin.c in Sources */, - 5A739B630EA4012300D751E1 /* jdapistd.c in Sources */, - 5A7C06FA111CC8D20025045A /* jdarith.c in Sources */, - 5A739B590EA4012300D751E1 /* jdatadst.c in Sources */, - 5A739B580EA4012300D751E1 /* jdatasrc.c in Sources */, - 5A739B6B0EA4012300D751E1 /* jdcoefct.c in Sources */, - 5A739B6A0EA4012300D751E1 /* jdcolor.c in Sources */, - 5A739B6C0EA4012300D751E1 /* jddctmgr.c in Sources */, - 5A739B500EA4012300D751E1 /* jdhuff.c in Sources */, - 5A739B480EA4012300D751E1 /* jdinput.c in Sources */, - 5A739B470EA4012300D751E1 /* jdmainct.c in Sources */, - 5A739B410EA4012300D751E1 /* jdmarker.c in Sources */, - 5A739B460EA4012300D751E1 /* jdmaster.c in Sources */, - 5A739B450EA4012300D751E1 /* jdmerge.c in Sources */, - 5A739B430EA4012300D751E1 /* jdpostct.c in Sources */, - 5A739B690EA4012300D751E1 /* jdsample.c in Sources */, - 5A739B680EA4012300D751E1 /* jdtrans.c in Sources */, - 5A739B420EA4012300D751E1 /* jerror.c in Sources */, - 5A739B5F0EA4012300D751E1 /* jfdctflt.c in Sources */, - 5A739B5E0EA4012300D751E1 /* jfdctfst.c in Sources */, - 5A739B5C0EA4012300D751E1 /* jfdctint.c in Sources */, - 5A739B5B0EA4012300D751E1 /* jidctflt.c in Sources */, - 5A739B540EA4012300D751E1 /* jidctfst.c in Sources */, - 5A739B530EA4012300D751E1 /* jidctint.c in Sources */, - 5A739B670EA4012300D751E1 /* jmemansi.c in Sources */, - 5A739B6F0EA4012300D751E1 /* jmemmgr.c in Sources */, - 5A739B4F0EA4012300D751E1 /* jquant1.c in Sources */, - 5A739B520EA4012300D751E1 /* jquant2.c in Sources */, - 5A739B510EA4012300D751E1 /* jutils.c in Sources */, + 5A582E031B52EA11007F6FD5 /* dummy.c in Sources */, + 5A0D420E1B4F37B4005A19B0 /* jcapimin.c in Sources */, + 5A0C77111B4F3CD100845D19 /* jcapistd.c in Sources */, + 5A0D42001B4F36AC005A19B0 /* jccoefct.c in Sources */, + 5A0D41FA1B4F3688005A19B0 /* jccolor.c in Sources */, + 5A00EF101B4F398400B5EBA7 /* jcdctmgr.c in Sources */, + 5A0C77011B4F3B9300845D19 /* jcext.c in Sources */, + 5A00EF0C1B4F395800B5EBA7 /* jchuff.c in Sources */, + 5A0C77151B4F3D1200845D19 /* jcinit.c in Sources */, + 5A0C77171B4F3D3400845D19 /* jcmainct.c in Sources */, + 5A0D41ED1B4F35BF005A19B0 /* jcmarker.c in Sources */, + 5A0D42021B4F36F4005A19B0 /* jcmaster.c in Sources */, + 5A0D42101B4F37C8005A19B0 /* jcomapi.c in Sources */, + 5A0C76FF1B4F3B7200845D19 /* jcparam.c in Sources */, + 5A0C770D1B4F3C4400845D19 /* jcphuff.c in Sources */, + 5A0C77191B4F3D5800845D19 /* jcprepct.c in Sources */, + 5A0D420C1B4F3789005A19B0 /* jcsample.c in Sources */, + 5A0C77071B4F3BFB00845D19 /* jctrans.c in Sources */, + 5A0C77031B4F3BA500845D19 /* jdapimin.c in Sources */, + 5A0D41EE1B4F35BF005A19B0 /* jdapistd.c in Sources */, + 5A00EF0E1B4F396C00B5EBA7 /* jdatadst.c in Sources */, + 5A0C77091B4F3C0800845D19 /* jdatasrc.c in Sources */, + 5A0D41FE1B4F36A7005A19B0 /* jdcoefct.c in Sources */, + 5A0D41FC1B4F3691005A19B0 /* jdcolor.c in Sources */, + 5A0D41EF1B4F35BF005A19B0 /* jddctmgr.c in Sources */, + 5A0D41F01B4F35BF005A19B0 /* jdhuff.c in Sources */, + 5A0C77051B4F3BD500845D19 /* jdinput.c in Sources */, + 5A0D42041B4F3728005A19B0 /* jdmainct.c in Sources */, + 5A0D41F71B4F3629005A19B0 /* jdmarker.c in Sources */, + 5A0D41F21B4F35E3005A19B0 /* jdmaster.c in Sources */, + 5A0D42081B4F375C005A19B0 /* jdphuff.c in Sources */, + 5A0D42061B4F3748005A19B0 /* jdpostct.c in Sources */, + 5A0D420A1B4F3781005A19B0 /* jdsample.c in Sources */, + 5A0C770F1B4F3C6D00845D19 /* jdtrans.c in Sources */, + 5A0C770B1B4F3C1C00845D19 /* jerror.c in Sources */, + 5A00EF121B4F399A00B5EBA7 /* jfdctflt.c in Sources */, + 5A00EF141B4F39BB00B5EBA7 /* jfdctint.c in Sources */, + 5A00EF0A1B4F393C00B5EBA7 /* jidctflt.c in Sources */, + 5A0D42141B4F37EF005A19B0 /* jidctint.c in Sources */, + 5A0D41F81B4F3629005A19B0 /* jmemmgr.c in Sources */, + 5A0D42121B4F37DC005A19B0 /* jmemnobs.c in Sources */, + 5A00EF061B4F384C00B5EBA7 /* jsimd_none.c in Sources */, + 5A0D41F41B4F3600005A19B0 /* jutils.c in Sources */, + 5F4975D52ADB4E68005AF7D4 /* jcicc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 5A20CCB9112394F80000400D /* PBXTargetDependency */ = { + 5AB115001B52B12300A3C73A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 5A20CCB3112394F20000400D /* download */; - targetProxy = 5A20CCB8112394F80000400D /* PBXContainerItemProxy */; + target = 5AB114FB1B52B11A00A3C73A /* download */; + targetProxy = 5AB114FF1B52B12300A3C73A /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -420,7 +352,14 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27B9E6139B08640095FC2F /* debug.xcconfig */; buildSettings = { + ENABLE_TESTABILITY = YES; LD_DYLIB_INSTALL_NAME = "@loader_path/libimageoptimjpeg.dylib"; + ONLY_ACTIVE_ARCH = YES; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/src", + "$(SRCROOT)", + ); }; name = Debug; }; @@ -429,22 +368,23 @@ baseConfigurationReference = 5A27B9E5139B08640095FC2F /* release.xcconfig */; buildSettings = { LD_DYLIB_INSTALL_NAME = "@loader_path/libimageoptimjpeg.dylib"; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/src", + "$(SRCROOT)", + ); }; name = Release; }; - 5A20CCB4112394F20000400D /* Debug */ = { + 5AB114FC1B52B11A00A3C73A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; - PRODUCT_NAME = download; }; name = Debug; }; - 5A20CCB5112394F20000400D /* Release */ = { + 5AB114FD1B52B11A00A3C73A /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - COPY_PHASE_STRIP = YES; - PRODUCT_NAME = download; }; name = Release; }; @@ -469,11 +409,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5A20CCC2112395100000400D /* Build configuration list for PBXLegacyTarget "download" */ = { + 5AB114FE1B52B11A00A3C73A /* Build configuration list for PBXLegacyTarget "download" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5A20CCB4112394F20000400D /* Debug */, - 5A20CCB5112394F20000400D /* Release */, + 5AB114FC1B52B11A00A3C73A /* Debug */, + 5AB114FD1B52B11A00A3C73A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/libjpeg/jversion.h b/libjpeg/jversion.h new file mode 100644 index 00000000..4d2b956b --- /dev/null +++ b/libjpeg/jversion.h @@ -0,0 +1,56 @@ +/* + * jversion.h + * + * This file was part of the Independent JPEG Group's software: + * Copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding. + * libjpeg-turbo Modifications: + * Copyright (C) 2010, 2012-2023, D. R. Commander. + * For conditions of distribution and use, see the accompanying README.ijg + * file. + * mozjpeg Modifications: + * Copyright (C) 2014, Mozilla Corporation. + * + * This file contains software version identification. + */ + + +#if JPEG_LIB_VERSION >= 80 + +#define JVERSION "8d 15-Jan-2012" + +#elif JPEG_LIB_VERSION >= 70 + +#define JVERSION "7 27-Jun-2009" + +#else + +#define JVERSION "6b 27-Mar-1998" + +#endif + +/* + * NOTE: It is our convention to place the authors in the following order: + * - libjpeg-turbo authors (2009-) in descending order of the date of their + * most recent contribution to the project, then in ascending order of the + * date of their first contribution to the project, then in alphabetical + * order + * - Upstream authors in descending order of the date of the first inclusion of + * their code + */ + +#define JCOPYRIGHT \ + "Copyright (C) 2009-2023 D. R. Commander\n" \ + "Copyright (C) 2015, 2020 Google, Inc.\n" \ + "Copyright (C) 2019-2020 Arm Limited\n" \ + "Copyright (C) 2015-2016, 2018 Matthieu Darbois\n" \ + "Copyright (C) 2011-2016 Siarhei Siamashka\n" \ + "Copyright (C) 2015 Intel Corporation\n" \ + "Copyright (C) 2013-2014 Linaro Limited\n" \ + "Copyright (C) 2013-2014 MIPS Technologies, Inc.\n" \ + "Copyright (C) 2009, 2012 Pierre Ossman for Cendio AB\n" \ + "Copyright (C) 2009-2011 Nokia Corporation and/or its subsidiary(-ies)\n" \ + "Copyright (C) 1999-2006 MIYASAKA Masaru\n" \ + "Copyright (C) 1991-2020 Thomas G. Lane, Guido Vollbeding" + +#define JCOPYRIGHT_SHORT \ + "Copyright (C) 1991-2023 The libjpeg-turbo Project and many others" diff --git a/libjpeg/remove_unused_features.diff b/libjpeg/remove_unused_features.diff deleted file mode 100644 index a0142683..00000000 --- a/libjpeg/remove_unused_features.diff +++ /dev/null @@ -1,26 +0,0 @@ ---- jmorecfg.h 2009-11-20 08:01:24.000000000 +0000 -+++ jmorecfg.h 2010-02-20 11:51:29.000000000 +0000 -@@ -268,7 +268,7 @@ - /* Capability options common to encoder and decoder: */ - - #define DCT_ISLOW_SUPPORTED /* slow but accurate integer algorithm */ --#define DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ -+#undef DCT_IFAST_SUPPORTED /* faster, less accurate integer method */ - #define DCT_FLOAT_SUPPORTED /* floating-point: accurate, fast on fast HW */ - - /* Encoder capability options: */ -@@ -293,11 +293,11 @@ - #define D_ARITH_CODING_SUPPORTED /* Arithmetic coding back end? */ - #define D_MULTISCAN_FILES_SUPPORTED /* Multiple-scan JPEG files? */ - #define D_PROGRESSIVE_SUPPORTED /* Progressive JPEG? (Requires MULTISCAN)*/ --#define IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ -+#undef IDCT_SCALING_SUPPORTED /* Output rescaling via IDCT? */ - #define SAVE_MARKERS_SUPPORTED /* jpeg_save_markers() needed? */ --#define BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ -+#undef BLOCK_SMOOTHING_SUPPORTED /* Block smoothing? (Progressive only) */ - #undef UPSAMPLE_SCALING_SUPPORTED /* Output rescaling at upsample stage? */ --#define UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ -+#undef UPSAMPLE_MERGING_SUPPORTED /* Fast path for sloppy upsampling? */ - #define QUANT_1PASS_SUPPORTED /* 1-pass color quantization? */ - #define QUANT_2PASS_SUPPORTED /* 2-pass color quantization? */ - diff --git a/libjpeg/src b/libjpeg/src new file mode 160000 index 00000000..260b65c3 --- /dev/null +++ b/libjpeg/src @@ -0,0 +1 @@ +Subproject commit 260b65c31187eb4e0be2e35e4714374e992b954a diff --git a/libpng/Makefile b/libpng/Makefile index a3493a86..2782cc05 100755 --- a/libpng/Makefile +++ b/libpng/Makefile @@ -1,9 +1,13 @@ - VERSION=0.6.5 OPTIPNG_FILENAME=optipng-$(VERSION).tar.gz +build: all + +all: png.h + png.h: /tmp/$(OPTIPNG_FILENAME) tar xzf /tmp/$(OPTIPNG_FILENAME) --strip-components=3 --exclude=Makefile optipng-$(VERSION)/lib/libpng + sed -i.bak 's/defined(TARGET_OS_MAC)/0/' pngconf.h && rm pngconf.h.bak /tmp/$(OPTIPNG_FILENAME): curl -L http://downloads.sourceforge.net/project/optipng/OptiPNG/optipng-$(VERSION)/$(OPTIPNG_FILENAME) -o /tmp/$(OPTIPNG_FILENAME) @@ -12,4 +16,5 @@ clean: test \! -e png.h || rm *.c png.h install: - \ No newline at end of file + +.PHONY: build all install clean diff --git a/libpng/config.h b/libpng/config.h index dd91f2ce..2fbad28a 100644 --- a/libpng/config.h +++ b/libpng/config.h @@ -95,6 +95,8 @@ #define PNG_READ_SUPPORTED #define PNG_READ_16_TO_8_SUPPORTED #define PNG_READ_EXPAND_SUPPORTED +#define PNG_sBIT_SUPPORTED +#define PNG_READ_RGB_TO_GRAY_SUPPORTED #define PNG_NO_FIXED_POINT_SUPPORTED 1 #define PNG_FLOATING_POINT_SUPPORTED 1 diff --git a/libpng/libpng.xcodeproj/project.pbxproj b/libpng/libpng.xcodeproj/project.pbxproj index 281be2bc..6e7d24b8 100644 --- a/libpng/libpng.xcodeproj/project.pbxproj +++ b/libpng/libpng.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -305,10 +305,10 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 0460; + LastUpgradeCheck = 1510; }; buildConfigurationList = 1DEB914E08733D8E0010E9CD /* Build configuration list for PBXProject "libpng" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 12.0"; developmentRegion = English; hasScannedForEncodings = 1; knownRegions = ( @@ -444,6 +444,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27B9F2139B087F0095FC2F /* debug.xcconfig */; buildSettings = { + ENABLE_TESTABILITY = YES; GCC_PREPROCESSOR_DEFINITIONS = ( HAVE_CONFIG_H, PNG_CONFIGURE_LIBPNG, @@ -451,7 +452,8 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = NO; HEADER_SEARCH_PATHS = "$(SRCROOT)"; LD_DYLIB_INSTALL_NAME = "@loader_path/liblibpng.dylib"; - SDKROOT = ""; + ONLY_ACTIVE_ARCH = YES; + SKIP_INSTALL = YES; }; name = Debug; }; @@ -467,7 +469,7 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = NO; HEADER_SEARCH_PATHS = "$(SRCROOT)"; LD_DYLIB_INSTALL_NAME = "@loader_path/liblibpng.dylib"; - SDKROOT = ""; + SKIP_INSTALL = YES; }; name = Release; }; @@ -476,6 +478,7 @@ buildSettings = { GCC_DYNAMIC_NO_PIC = NO; PRODUCT_NAME = download; + SDKROOT = macosx; }; name = Debug; }; @@ -484,6 +487,7 @@ buildSettings = { COPY_PHASE_STRIP = YES; PRODUCT_NAME = download; + SDKROOT = macosx; }; name = Release; }; @@ -492,6 +496,7 @@ buildSettings = { GCC_DYNAMIC_NO_PIC = NO; PRODUCT_NAME = "download-zlib"; + SDKROOT = macosx; }; name = Debug; }; @@ -500,6 +505,7 @@ buildSettings = { COPY_PHASE_STRIP = YES; PRODUCT_NAME = "download-zlib"; + SDKROOT = macosx; }; name = Release; }; diff --git a/optipng/Makefile b/optipng/Makefile deleted file mode 100755 index 35251c5a..00000000 --- a/optipng/Makefile +++ /dev/null @@ -1,22 +0,0 @@ - -VERSION=0.6.5 -OPTIPNG_FILENAME=optipng-$(VERSION).tar.gz - -all: patched - -patched: src/optipng.c - patch -p1 -i remove_nonpng_formats.patch && \ - patch -p1 -i dirtyalpha.patch && \ - touch patched - -src/optipng.c: /tmp/$(OPTIPNG_FILENAME) - tar xzf /tmp/$(OPTIPNG_FILENAME) --strip-components=1 optipng-$(VERSION)/src optipng-$(VERSION)/lib/pngxtern - -/tmp/$(OPTIPNG_FILENAME): - curl -L http://downloads.sourceforge.net/project/optipng/OptiPNG/optipng-$(VERSION)/$(OPTIPNG_FILENAME) -o /tmp/$(OPTIPNG_FILENAME) - -clean: - - rm -rf ./patched ./src/ ./lib/ - -install: - \ No newline at end of file diff --git a/optipng/dirtyalpha.patch b/optipng/dirtyalpha.patch deleted file mode 100644 index fef8f6a6..00000000 --- a/optipng/dirtyalpha.patch +++ /dev/null @@ -1,192 +0,0 @@ -index 16f7acd..7b4a3c5 100644 ---- a/src/opngoptim.c -+++ b/src/opngoptim.c -@@ -1063,6 +1063,8 @@ opng_read_file(FILE *infile) - reductions &= ~OPNG_REDUCE_BIT_DEPTH; - if (options.nc) - reductions &= ~OPNG_REDUCE_COLOR_TYPE; -+ if (options.nd) -+ reductions &= ~OPNG_REDUCE_DIRTY_ALPHA; - if (options.np) - reductions &= ~OPNG_REDUCE_PALETTE_ALL; - if (options.nz && (process.status & INPUT_HAS_PNG_DATASTREAM)) -diff --git a/src/opngreduc.c b/src/opngreduc.c -index e4d5c98..5e82152 100644 ---- a/src/opngreduc.c -+++ b/src/opngreduc.c -@@ -1151,6 +1151,69 @@ opng_analyze_sample_usage(png_structp png_ptr, png_infop info_ptr, - usage_map[info_ptr->background.index] = 1; - } - -+/* -+ * Remove RGB components or transparent pixels in RGB+alpha images. -+ * The function returns OPNG_REDUCE_DIRTY_ALPHA if any pixels were cleared. -+ */ -+png_uint_32 /* PRIVATE */ -+opng_reduce_dirty_alpha(png_structp png_ptr, png_infop info_ptr) -+{ -+ png_uint_32 result = OPNG_REDUCE_NONE; -+ png_bytepp row_ptr; -+ png_bytep sample_ptr, alpha_row; -+ png_uint_32 height, width, channels, i, j; -+ unsigned int color_type; -+ -+ png_debug(1, "in opng_reduce_dirty_transparency\n"); -+ -+ if (info_ptr->bit_depth != 8) -+ return OPNG_REDUCE_NONE; /* nothing is done in this case */ -+ -+ color_type = info_ptr->color_type; -+ OPNG_ASSERT(!(info_ptr->color_type & PNG_COLOR_MASK_PALETTE)); -+ -+ row_ptr = info_ptr->row_pointers; -+ height = info_ptr->height; -+ width = info_ptr->width; -+ channels = info_ptr->channels; -+ alpha_row = (png_bytep)png_malloc(png_ptr, width); -+ -+ /* Search for transparent pixels. */ -+ for (i = 0; i < height; ++i, ++row_ptr) -+ { -+ sample_ptr = *row_ptr; -+ opng_get_alpha_row(png_ptr, info_ptr, *row_ptr, alpha_row); -+ if (color_type & PNG_COLOR_MASK_COLOR) -+ { -+ for (j = 0; j < width; ++j, sample_ptr += channels) -+ { -+ if (alpha_row[j] == 0) -+ { -+ sample_ptr[0] = 0; -+ sample_ptr[1] = 0; -+ sample_ptr[2] = 0; -+ result = OPNG_REDUCE_DIRTY_ALPHA; -+ } -+ } -+ } -+ else /* grayscale */ -+ { -+ for (j = 0; j < width; ++j, sample_ptr += channels) -+ { -+ if (alpha_row[j] == 0) -+ { -+ sample_ptr[0] = 0; -+ result = OPNG_REDUCE_DIRTY_ALPHA; -+ } -+ } -+ } -+ } -+ -+ png_free(png_ptr, alpha_row); -+ return result; -+} -+ -+ - - /* - * Reduce the palette (only the fast method is implemented). -@@ -1339,7 +1402,7 @@ opng_reduce_image(png_structp png_ptr, png_infop info_ptr, - png_uint_32 reductions) - { - unsigned int color_type; -- png_uint_32 result; -+ png_uint_32 result = 0; - - opng_debug(1, "in opng_reduce_image_type"); - -@@ -1354,8 +1417,14 @@ opng_reduce_image(png_structp png_ptr, png_infop info_ptr, - - /* The reductions below must be applied in the given order. */ - -+ if ((color_type == PNG_COLOR_TYPE_RGB_ALPHA || -+ color_type == PNG_COLOR_TYPE_GRAY_ALPHA) -+ && (reductions & OPNG_REDUCE_DIRTY_ALPHA) -+ ) -+ result |= opng_reduce_dirty_alpha(png_ptr, info_ptr); -+ - /* Try to reduce the high bits and color/alpha channels. */ -- result = opng_reduce_bits(png_ptr, info_ptr, reductions); -+ result |= opng_reduce_bits(png_ptr, info_ptr, reductions); - - /* Try to reduce the palette image. */ - if (color_type == PNG_COLOR_TYPE_PALETTE && -diff --git a/src/opngreduc.h b/src/opngreduc.h -index 23f2eb0..a9f27e3 100644 ---- a/src/opngreduc.h -+++ b/src/opngreduc.h -@@ -74,6 +74,8 @@ png_uint_32 PNGAPI opng_reduce_image(png_structp png_ptr, png_infop info_ptr, - from PLTE and tRNS */ - #define OPNG_REDUCE_PALETTE_FAST 0x0200 /* remove trailing sterile entries - from PLTE and tRNS */ -+#define OPNG_REDUCE_DIRTY_ALPHA 0x0400 /* zero RGB components of -+ transparent pixels */ - #define OPNG_REDUCE_ANCILLARY 0x1000 - - #define OPNG_REDUCE_BIT_DEPTH \ -@@ -89,7 +91,7 @@ png_uint_32 PNGAPI opng_reduce_image(png_structp png_ptr, png_infop info_ptr, - - #define OPNG_REDUCE_ALL \ - (OPNG_REDUCE_BIT_DEPTH | OPNG_REDUCE_COLOR_TYPE | \ -- OPNG_REDUCE_PALETTE_ALL | OPNG_REDUCE_ANCILLARY) -+ OPNG_REDUCE_PALETTE_ALL | OPNG_REDUCE_ANCILLARY | OPNG_REDUCE_DIRTY_ALPHA) - - #endif /* OPNG_IMAGE_REDUCTIONS_SUPPORTED */ - -diff --git a/src/optipng.c b/src/optipng.c -index 1768859..06b4902 100644 ---- a/src/optipng.c -+++ b/src/optipng.c -@@ -111,6 +111,7 @@ static const char *msg_help = - " -nb\t\t\tno bit depth reduction\n" - " -nc\t\t\tno color type reduction\n" - " -np\t\t\tno palette reduction\n" -+ " -nd\t\t\tno dirty alpha transparency cleaning\n" - #if 0 /* not implemented */ - " -nm\t\t\tno metadata optimization\n" - #endif -@@ -551,6 +552,10 @@ parse_args(int argc, char *argv[]) - options.nb = options.nc = options.np = 1; - /* options.nm = 1; */ - } -+ else if (strcmp(opt, "nd") == 0) -+ { -+ options.nd = 1; -+ } - else if (strcmp("nz", opt) == 0) - { - /* -nz */ -@@ -846,9 +851,9 @@ app_print_cntrl(int cntrl_code) - } - - if (con_file != NULL) -- fputs(con_str, con_file); -+ fprintf(con_file, "%s",con_str); - if (log_file != NULL) -- fputs(log_str, log_file); -+ fprintf(log_file, "%s",log_str); - } - - -diff --git a/src/optipng.h b/src/optipng.h -index cb6343e..55c4b2b 100644 ---- a/src/optipng.h -+++ b/src/optipng.h -@@ -31,7 +31,7 @@ struct opng_options - int full; - int interlace; - int keep; -- int nb, nc, np, nz; -+ int nb, nc, np, nz, nd; - int preserve; - int quiet; - int simulate; -diff --git a/src/proginfo.h b/src/proginfo.h -index 48bc8e8..1c2da30 100644 ---- a/src/proginfo.h -+++ b/src/proginfo.h -@@ -1,5 +1,5 @@ - #define PROGRAM_NAME "OptiPNG" - #define PROGRAM_DESCRIPTION "Advanced PNG optimizer" --#define PROGRAM_VERSION "0.6.5" -+#define PROGRAM_VERSION "0.6.5 + dirtyalpha patch" - #define PROGRAM_COPYRIGHT "Copyright (C) 2001-2011 Cosmin Truta" - #define PROGRAM_URI "http://optipng.sourceforge.net/" diff --git a/optipng/optipng.xcodeproj/project.pbxproj b/optipng/optipng.xcodeproj/project.pbxproj deleted file mode 100644 index 2c241cf8..00000000 --- a/optipng/optipng.xcodeproj/project.pbxproj +++ /dev/null @@ -1,403 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 5A984A8C11237F85007622D7 /* liblibpng.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A984A8911237F68007622D7 /* liblibpng.dylib */; }; - 5A984A9511237FE2007622D7 /* opngoptim.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A984A9411237FE2007622D7 /* opngoptim.c */; }; - 5A9D56450E7F21AD000F129F /* pngxio.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D55FF0E7F21AD000F129F /* pngxio.c */; }; - 5A9D56460E7F21AD000F129F /* pngxmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D56000E7F21AD000F129F /* pngxmem.c */; }; - 5A9D56480E7F21AD000F129F /* pngxread.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D56020E7F21AD000F129F /* pngxread.c */; }; - 5A9D564D0E7F21AD000F129F /* pngxset.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D56070E7F21AD000F129F /* pngxset.c */; }; - 5A9D564E0E7F21AD000F129F /* pngxwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D56090E7F21AD000F129F /* pngxwrite.c */; }; - 5A9D56730E7F21AD000F129F /* cbitset.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D56360E7F21AD000F129F /* cbitset.c */; }; - 5A9D56740E7F21AD000F129F /* opngreduc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D56390E7F21AD000F129F /* opngreduc.c */; }; - 5A9D56750E7F21AD000F129F /* optipng.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D563A0E7F21AD000F129F /* optipng.c */; }; - 5A9D56760E7F21AD000F129F /* osys.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A9D563B0E7F21AD000F129F /* osys.c */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 5A920E3713999EC200BED85A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5A7399DA0EA2835D00D751E1 /* libpng.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 5AC2B4D613394EDA00376783; - remoteInfo = static; - }; - 5A984A8811237F68007622D7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5A7399DA0EA2835D00D751E1 /* libpng.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = D2AAC0630554660B00DB518D; - remoteInfo = libpng; - }; - 5A984A8A11237F74007622D7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 5A7399DA0EA2835D00D751E1 /* libpng.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = D2AAC0620554660B00DB518D; - remoteInfo = libpng; - }; - 5A984AA91123802F007622D7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 08FB7793FE84155DC02AAC07 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5A984AA611238023007622D7; - remoteInfo = download; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 5A18C3BC1288BD310037F881 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - 5A27BA54139B097C0095FC2F /* release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = SOURCE_ROOT; }; - 5A27BA55139B097C0095FC2F /* debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = SOURCE_ROOT; }; - 5A7399DA0EA2835D00D751E1 /* libpng.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libpng.xcodeproj; path = ../libpng/libpng.xcodeproj; sourceTree = ""; }; - 5A984A9411237FE2007622D7 /* opngoptim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opngoptim.c; sourceTree = ""; }; - 5A9D55FE0E7F21AD000F129F /* pngx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pngx.h; sourceTree = ""; }; - 5A9D55FF0E7F21AD000F129F /* pngxio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pngxio.c; sourceTree = ""; }; - 5A9D56000E7F21AD000F129F /* pngxmem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pngxmem.c; sourceTree = ""; }; - 5A9D56020E7F21AD000F129F /* pngxread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pngxread.c; sourceTree = ""; }; - 5A9D56070E7F21AD000F129F /* pngxset.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pngxset.c; sourceTree = ""; }; - 5A9D56080E7F21AD000F129F /* pngxtern.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pngxtern.h; sourceTree = ""; }; - 5A9D56090E7F21AD000F129F /* pngxwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pngxwrite.c; sourceTree = ""; }; - 5A9D56360E7F21AD000F129F /* cbitset.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cbitset.c; sourceTree = ""; }; - 5A9D56370E7F21AD000F129F /* cbitset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cbitset.h; sourceTree = ""; }; - 5A9D56380E7F21AD000F129F /* cexcept.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cexcept.h; sourceTree = ""; }; - 5A9D56390E7F21AD000F129F /* opngreduc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = opngreduc.c; sourceTree = ""; }; - 5A9D563A0E7F21AD000F129F /* optipng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = optipng.c; sourceTree = ""; }; - 5A9D563B0E7F21AD000F129F /* osys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = osys.c; sourceTree = ""; }; - 5A9D563C0E7F21AD000F129F /* osys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = osys.h; sourceTree = ""; }; - 5A9D563D0E7F21AD000F129F /* proginfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = proginfo.h; sourceTree = ""; }; - 8DD76FB20486AB0100D96B5E /* optipng */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = optipng; sourceTree = BUILT_PRODUCTS_DIR; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 8DD76FAD0486AB0100D96B5E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 5A984A8C11237F85007622D7 /* liblibpng.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 08FB7794FE84155DC02AAC07 /* optipng */ = { - isa = PBXGroup; - children = ( - 08FB7795FE84155DC02AAC07 /* Source */, - 5A27BA54139B097C0095FC2F /* release.xcconfig */, - 5A27BA55139B097C0095FC2F /* debug.xcconfig */, - 1AB674ADFE9D54B511CA2CBB /* Products */, - ); - name = optipng; - sourceTree = ""; - }; - 08FB7795FE84155DC02AAC07 /* Source */ = { - isa = PBXGroup; - children = ( - 5A18C3BC1288BD310037F881 /* Makefile */, - 5A9D55F20E7F21AD000F129F /* src */, - 5A7399DA0EA2835D00D751E1 /* libpng.xcodeproj */, - ); - name = Source; - sourceTree = ""; - }; - 1AB674ADFE9D54B511CA2CBB /* Products */ = { - isa = PBXGroup; - children = ( - 8DD76FB20486AB0100D96B5E /* optipng */, - ); - name = Products; - sourceTree = ""; - }; - 5A984A8311237F68007622D7 /* Products */ = { - isa = PBXGroup; - children = ( - 5A984A8911237F68007622D7 /* liblibpng.dylib */, - 5A920E3813999EC200BED85A /* libstatic.a */, - ); - name = Products; - sourceTree = ""; - }; - 5A9D55F20E7F21AD000F129F /* src */ = { - isa = PBXGroup; - children = ( - 5A9D55F30E7F21AD000F129F /* pngxtern */, - 5A9D56360E7F21AD000F129F /* cbitset.c */, - 5A9D56370E7F21AD000F129F /* cbitset.h */, - 5A9D56380E7F21AD000F129F /* cexcept.h */, - 5A984A9411237FE2007622D7 /* opngoptim.c */, - 5A9D56390E7F21AD000F129F /* opngreduc.c */, - 5A9D563A0E7F21AD000F129F /* optipng.c */, - 5A9D563B0E7F21AD000F129F /* osys.c */, - 5A9D563C0E7F21AD000F129F /* osys.h */, - 5A9D563D0E7F21AD000F129F /* proginfo.h */, - ); - path = src; - sourceTree = ""; - }; - 5A9D55F30E7F21AD000F129F /* pngxtern */ = { - isa = PBXGroup; - children = ( - 5A9D55FE0E7F21AD000F129F /* pngx.h */, - 5A9D55FF0E7F21AD000F129F /* pngxio.c */, - 5A9D56000E7F21AD000F129F /* pngxmem.c */, - 5A9D56020E7F21AD000F129F /* pngxread.c */, - 5A9D56070E7F21AD000F129F /* pngxset.c */, - 5A9D56080E7F21AD000F129F /* pngxtern.h */, - 5A9D56090E7F21AD000F129F /* pngxwrite.c */, - ); - name = pngxtern; - path = lib/pngxtern; - sourceTree = SOURCE_ROOT; - }; -/* End PBXGroup section */ - -/* Begin PBXLegacyTarget section */ - 5A984AA611238023007622D7 /* download */ = { - isa = PBXLegacyTarget; - buildArgumentsString = "$(ACTION)"; - buildConfigurationList = 5A984ABF112380E4007622D7 /* Build configuration list for PBXLegacyTarget "download" */; - buildPhases = ( - ); - buildToolPath = /usr/bin/make; - dependencies = ( - ); - name = download; - passBuildSettingsInEnvironment = 1; - productName = download; - }; -/* End PBXLegacyTarget section */ - -/* Begin PBXNativeTarget section */ - 8DD76FA90486AB0100D96B5E /* optipng */ = { - isa = PBXNativeTarget; - buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "optipng" */; - buildPhases = ( - 8DD76FAB0486AB0100D96B5E /* Sources */, - 8DD76FAD0486AB0100D96B5E /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 5A984A8B11237F74007622D7 /* PBXTargetDependency */, - 5A984AAA1123802F007622D7 /* PBXTargetDependency */, - ); - name = optipng; - productInstallPath = "$(HOME)/bin"; - productName = optipng; - productReference = 8DD76FB20486AB0100D96B5E /* optipng */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 08FB7793FE84155DC02AAC07 /* Project object */ = { - isa = PBXProject; - attributes = { - BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 0460; - }; - buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "optipng" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 1; - knownRegions = ( - English, - Japanese, - French, - German, - ); - mainGroup = 08FB7794FE84155DC02AAC07 /* optipng */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 5A984A8311237F68007622D7 /* Products */; - ProjectRef = 5A7399DA0EA2835D00D751E1 /* libpng.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 8DD76FA90486AB0100D96B5E /* optipng */, - 5A984AA611238023007622D7 /* download */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 5A920E3813999EC200BED85A /* libstatic.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libstatic.a; - remoteRef = 5A920E3713999EC200BED85A /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 5A984A8911237F68007622D7 /* liblibpng.dylib */ = { - isa = PBXReferenceProxy; - fileType = "compiled.mach-o.dylib"; - path = liblibpng.dylib; - remoteRef = 5A984A8811237F68007622D7 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXSourcesBuildPhase section */ - 8DD76FAB0486AB0100D96B5E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5A9D56730E7F21AD000F129F /* cbitset.c in Sources */, - 5A984A9511237FE2007622D7 /* opngoptim.c in Sources */, - 5A9D56740E7F21AD000F129F /* opngreduc.c in Sources */, - 5A9D56750E7F21AD000F129F /* optipng.c in Sources */, - 5A9D56760E7F21AD000F129F /* osys.c in Sources */, - 5A9D56450E7F21AD000F129F /* pngxio.c in Sources */, - 5A9D56460E7F21AD000F129F /* pngxmem.c in Sources */, - 5A9D56480E7F21AD000F129F /* pngxread.c in Sources */, - 5A9D564D0E7F21AD000F129F /* pngxset.c in Sources */, - 5A9D564E0E7F21AD000F129F /* pngxwrite.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 5A984A8B11237F74007622D7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libpng; - targetProxy = 5A984A8A11237F74007622D7 /* PBXContainerItemProxy */; - }; - 5A984AAA1123802F007622D7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 5A984AA611238023007622D7 /* download */; - targetProxy = 5A984AA91123802F007622D7 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1DEB928608733DD80010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_DYNAMIC_NO_PIC = NO; - INSTALL_PATH = /usr/local/bin; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - PRODUCT_NAME = optipng; - }; - name = Debug; - }; - 1DEB928708733DD80010E9CD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - INSTALL_PATH = /usr/local/bin; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - PRODUCT_NAME = optipng; - }; - name = Release; - }; - 1DEB928A08733DD80010E9CD /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A27BA55139B097C0095FC2F /* debug.xcconfig */; - buildSettings = { - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_CPP_RTTI = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - GCC_OBJC_CALL_CXX_CDTORS = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - PNG_CONFIGURE_LIBPNG, - HAVE_CONFIG_H, - ); - GCC_THREADSAFE_STATICS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ../libpng/; - }; - name = Debug; - }; - 1DEB928B08733DD80010E9CD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5A27BA54139B097C0095FC2F /* release.xcconfig */; - buildSettings = { - GCC_ENABLE_CPP_EXCEPTIONS = NO; - GCC_ENABLE_CPP_RTTI = NO; - GCC_ENABLE_OBJC_EXCEPTIONS = NO; - "GCC_MODEL_TUNING[arch=x86_64]" = "-mtune=core2"; - GCC_OBJC_CALL_CXX_CDTORS = NO; - GCC_PREPROCESSOR_DEFINITIONS = ( - PNG_CONFIGURE_LIBPNG, - HAVE_CONFIG_H, - NDEBUG, - ); - GCC_THREADSAFE_STATICS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_SIGN_COMPARE = NO; - GCC_WARN_UNUSED_VARIABLE = YES; - HEADER_SEARCH_PATHS = ../libpng/; - }; - name = Release; - }; - 5A984AA711238024007622D7 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = download; - }; - name = Debug; - }; - 5A984AA811238024007622D7 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - PRODUCT_NAME = download; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "optipng" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB928608733DD80010E9CD /* Debug */, - 1DEB928708733DD80010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "optipng" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1DEB928A08733DD80010E9CD /* Debug */, - 1DEB928B08733DD80010E9CD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 5A984ABF112380E4007622D7 /* Build configuration list for PBXLegacyTarget "download" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 5A984AA711238024007622D7 /* Debug */, - 5A984AA811238024007622D7 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; -} diff --git a/optipng/remove_nonpng_formats.patch b/optipng/remove_nonpng_formats.patch deleted file mode 100644 index 5eb193f1..00000000 --- a/optipng/remove_nonpng_formats.patch +++ /dev/null @@ -1,43 +0,0 @@ -diff --git a/lib/pngxtern/pngxread.c b/lib/pngxtern/pngxread.c -index e0744d3..a3fc2db 100644 ---- a/lib/pngxtern/pngxread.c -+++ b/lib/pngxtern/pngxread.c -@@ -79,10 +79,8 @@ pngx_read_image(png_structp png_ptr, png_infop info_ptr, - { - png_byte sig[128]; - size_t num; -- int (*read_fn)(png_structp, png_infop, FILE *); - FILE *stream; - fpos_t fpos; -- int result; - - /* Precondition. */ - #ifdef PNG_FLAG_MALLOC_NULL_MEM_OK -@@ -110,26 +108,5 @@ pngx_read_image(png_structp png_ptr, png_infop info_ptr, - } - return 1; - } -- -- /* Check the signature bytes against other known image formats. */ -- if (pngx_sig_is_bmp(sig, num, fmt_name, fmt_description) > 0) -- read_fn = pngx_read_bmp; -- else if (pngx_sig_is_gif(sig, num, fmt_name, fmt_description) > 0) -- read_fn = pngx_read_gif; -- else if (pngx_sig_is_jpeg(sig, num, fmt_name, fmt_description) > 0) -- read_fn = pngx_read_jpeg; -- else if (pngx_sig_is_pnm(sig, num, fmt_name, fmt_description) > 0) -- read_fn = pngx_read_pnm; -- else if (pngx_sig_is_tiff(sig, num, fmt_name, fmt_description) > 0) -- read_fn = pngx_read_tiff; -- else -- return 0; /* not a known image format */ -- -- /* Read the image. */ -- result = read_fn(png_ptr, info_ptr, stream); -- /* Signature checking may give false positives; reading can still fail. */ -- if (result <= 0) /* this isn't the format we thought it was */ -- if (fsetpos(stream, &fpos) != 0) -- png_error(png_ptr, "Can't fseek in input file stream"); -- return result; -+ return 0; - } diff --git a/oxipng/oxipng b/oxipng/oxipng new file mode 160000 index 00000000..e1db84fd --- /dev/null +++ b/oxipng/oxipng @@ -0,0 +1 @@ +Subproject commit e1db84fd9745f3320c08b883e4942cd5b30b98a6 diff --git a/oxipng/oxipng.xcodeproj/project.pbxproj b/oxipng/oxipng.xcodeproj/project.pbxproj new file mode 100644 index 00000000..9e693863 --- /dev/null +++ b/oxipng/oxipng.xcodeproj/project.pbxproj @@ -0,0 +1,262 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 53; + objects = { + +/* Begin PBXBuildFile section */ + CA0001676775A9B0E7F50B60 /* oxipng/Cargo.toml in Sources */ = {isa = PBXBuildFile; fileRef = CAF919E717C33EF4668187A5 /* oxipng/Cargo.toml */; settings = {COMPILER_FLAGS = "--bin 'oxipng' --features 'binary'"; }; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + CAF419E717C3AC6C1400ACA8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d"; + filePatterns = "*/Cargo.toml"; + fileType = pattern.proxy; + inputFiles = ( + ); + isEditable = 0; + name = "Cargo project build"; + outputFiles = ( + "$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)", + ); + script = "# generated with cargo-xcode 1.8.0\nset -xeu;\nexport PATH=\"$HOME/.cargo/bin:$PATH:/usr/local/bin:/opt/homebrew/bin\";\n# don't use ios/watchos linker for build scripts and proc macros\nexport CARGO_TARGET_AARCH64_APPLE_DARWIN_LINKER=/usr/bin/ld\nexport CARGO_TARGET_X86_64_APPLE_DARWIN_LINKER=/usr/bin/ld\n\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_OS=ios-macabi\nfi\nCARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\n\nif [ \"$CARGO_XCODE_BUILD_PROFILE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\n\nif [ \"$ACTION\" = clean ]; then\n cargo clean --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\";\n rm -f \"$SCRIPT_OUTPUT_FILE_0\"\n exit 0\nfi\ncargo build --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\" || {\n if command -v rustup &> /dev/null; then\n if ! rustup target list --installed | grep -Eq \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo >&2 \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn't installed (will try rustup next)\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can't install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\n fi\n echo >&2 \"error: cargo build failed\"; exit 1; }\n\n# it's too hard to explain Cargo's actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\" || { echo >&2 \"can't hardlink $BUILT_SRC to $SCRIPT_OUTPUT_FILE_0\"; exit 1; }\n\n# cargo generates a dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -f \"$DEP_FILE_SRC\" ]; then\n DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\" || { echo >&2 \"can't copy $DEP_FILE_SRC to $DEP_FILE_DST\"; exit 1; }\n\n echo >> \"$DEP_FILE_DST\" \"${SCRIPT_OUTPUT_FILE_0/ /\\\\ /}: ${BUILT_SRC/ /\\\\ /}\"\nfi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don't stay around after archs change\n# must match input for LipoScript\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! grep -Eq \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n\necho \"success: $ACTION of $SCRIPT_OUTPUT_FILE_0 for $CARGO_XCODE_TARGET_TRIPLE\"\n"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXFileReference section */ + CA00E01F74FC45145F35021F /* oxipng */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = oxipng; sourceTree = BUILT_PRODUCTS_DIR; }; + CAF919E717C33EF4668187A5 /* oxipng/Cargo.toml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = oxipng/Cargo.toml; sourceTree = ""; }; + CAFDFAC0D0B0ACC9FD72F282 /* debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = ""; }; + CAFEFAC0D0B0ABC47E405028 /* release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + CAF019E717C3D65BC3C892A8 = { + isa = PBXGroup; + children = ( + CAF919E717C33EF4668187A5 /* oxipng/Cargo.toml */, + CAF119E717C322869D176AE5 /* Products */, + CAF219E717C398AF0B5890DB /* Frameworks */, + CAFDFAC0D0B0ACC9FD72F282 /* debug.xcconfig */, + CAFEFAC0D0B0ABC47E405028 /* release.xcconfig */, + ); + sourceTree = ""; + }; + CAF119E717C322869D176AE5 /* Products */ = { + isa = PBXGroup; + children = ( + CA00E01F74FC45145F35021F /* oxipng */, + ); + name = Products; + sourceTree = ""; + }; + CAF219E717C398AF0B5890DB /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + CA00E01F74FCA9B0E7F50B60 /* oxipng-bin */ = { + isa = PBXNativeTarget; + buildConfigurationList = CA005D46FC55A9B0E7F50B60 /* Build configuration list for PBXNativeTarget "oxipng-bin" */; + buildPhases = ( + CA00F4910930A9B0E7F50B60 /* Sources */, + CAF519E717C3AF6EBB7F357C /* Universal Binary lipo */, + ); + buildRules = ( + CAF419E717C3AC6C1400ACA8 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "oxipng-bin"; + productName = oxipng; + productReference = CA00E01F74FC45145F35021F /* oxipng */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + CAF319E717C3E04653AD465F /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + TargetAttributes = { + CA00E01F74FCA9B0E7F50B60 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = CAF619E717C380E02D6C7F57 /* Build configuration list for PBXProject "oxipng" */; + compatibilityVersion = "Xcode 11.4"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CAF019E717C3D65BC3C892A8; + productRefGroup = CAF119E717C322869D176AE5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + CA00E01F74FCA9B0E7F50B60 /* oxipng-bin */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + CAF519E717C3AF6EBB7F357C /* Universal Binary lipo */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist", + ); + name = "Universal Binary lipo"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# generated with cargo-xcode 1.8.0\nset -eux;\ntr '\\n' '\\0' < \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nif [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + CA00F4910930A9B0E7F50B60 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CA0001676775A9B0E7F50B60 /* oxipng/Cargo.toml in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + CA00DF050DDBA9B0E7F50B60 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = oxipng.d; + CARGO_XCODE_CARGO_FILE_NAME = oxipng; + PRODUCT_NAME = oxipng; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + CA00FBAC58F8A9B0E7F50B60 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = oxipng.d; + CARGO_XCODE_CARGO_FILE_NAME = oxipng; + PRODUCT_NAME = oxipng; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + CAF7FAC0D0B03CC16B37690B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAFEFAC0D0B0ABC47E405028 /* release.xcconfig */; + buildSettings = { + ADDITIONAL_SDKS = macosx; + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_PROFILE = release; + CARGO_XCODE_FEATURES = ""; + CARGO_XCODE_TARGET_ARCH = "$(CURRENT_ARCH)"; + "CARGO_XCODE_TARGET_ARCH[arch=arm64]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=arm64e]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64h]" = x86_64; + CARGO_XCODE_TARGET_OS = "$(PLATFORM_NAME)"; + "CARGO_XCODE_TARGET_OS[sdk=appletvos]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator][arch=x86_64]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + "CARGO_XCODE_TARGET_OS[sdk=watchsimulator]" = "watchos-sim"; + CURRENT_PROJECT_VERSION = 9.0; + MARKETING_VERSION = 9.0.0; + PRODUCT_NAME = oxipng; + RUSTUP_TOOLCHAIN = ""; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + }; + name = Release; + }; + CAF8FAC0D0B0228BE02872F8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAFDFAC0D0B0ACC9FD72F282 /* debug.xcconfig */; + buildSettings = { + ADDITIONAL_SDKS = macosx; + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_PROFILE = debug; + CARGO_XCODE_FEATURES = ""; + CARGO_XCODE_TARGET_ARCH = "$(CURRENT_ARCH)"; + "CARGO_XCODE_TARGET_ARCH[arch=arm64]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=arm64e]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64h]" = x86_64; + CARGO_XCODE_TARGET_OS = "$(PLATFORM_NAME)"; + "CARGO_XCODE_TARGET_OS[sdk=appletvos]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator][arch=x86_64]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + "CARGO_XCODE_TARGET_OS[sdk=watchsimulator]" = "watchos-sim"; + CURRENT_PROJECT_VERSION = 9.0; + MARKETING_VERSION = 9.0.0; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = oxipng; + RUSTUP_TOOLCHAIN = ""; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + CA005D46FC55A9B0E7F50B60 /* Build configuration list for PBXNativeTarget "oxipng-bin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA00DF050DDBA9B0E7F50B60 /* Release */, + CA00FBAC58F8A9B0E7F50B60 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CAF619E717C380E02D6C7F57 /* Build configuration list for PBXProject "oxipng" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CAF7FAC0D0B03CC16B37690B /* Release */, + CAF8FAC0D0B0228BE02872F8 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CAF319E717C3E04653AD465F /* Project object */; +} diff --git a/pngcrush/Makefile b/pngcrush/Makefile index e4ed7fef..76327417 100755 --- a/pngcrush/Makefile +++ b/pngcrush/Makefile @@ -1,15 +1,26 @@ -VERSION=1.7.46 +VERSION=1.8.10 +ARCHIVE=/tmp/pngcrush-$(VERSION).tar.gz -.PHONY: all +build: all all: pngcrush.c -pngcrush.c: - curl -L http://downloads.sourceforge.net/project/pmt/pngcrush/old-versions/1.7/$(VERSION)/pngcrush-$(VERSION).tar.gz | tar xz --strip-components=1 --exclude=Makefile - -rm png.h pngconf.h 2>/dev/null - patch -p2 < pngcrush.patch +$(ARCHIVE): + curl -L -o $(ARCHIVE) http://downloads.sourceforge.net/project/pmt/pngcrush/old-versions/1.8/$(VERSION)/pngcrush-$(VERSION).tar.gz + +tmp/pngcrush.c: pngcrush.patch $(ARCHIVE) + test -d tmp || mkdir -p tmp + tar xzf $(ARCHIVE) -C tmp --strip-components=1 --exclude=Makefile + +pngcrush.c: tmp/pngcrush.c + ( cd tmp; patch --forward -p1 < ../pngcrush.patch ) + -rm tmp/png.h tmp/pngconf.h 2>/dev/null + cp tmp/*.[ch] ./ + touch pngcrush.c clean: - -rm *.c *.h 2>/dev/null + -rm -rf tmp *.c *.h $(ARCHIVE) patched install: + +.PHONY: all build clean diff --git a/pngcrush/pngcrush.patch b/pngcrush/pngcrush.patch index a3f28b2c..f54adc59 100644 --- a/pngcrush/pngcrush.patch +++ b/pngcrush/pngcrush.patch @@ -1,52 +1,66 @@ -diff --git a/pngcrush/pngcrush.c b/pngcrush/pngcrush.c -index bf625c6..f693089 100644 ---- a/pngcrush/pngcrush.c -+++ b/pngcrush/pngcrush.c -@@ -2342,7 +2342,6 @@ void pngcrush_write_png(png_structp write_pointer, png_bytep data, +diff --git a/pngcrush.c b/pngcrush.c +index d0c387e..4f8e107 100644 +--- a/pngcrush.c ++++ b/pngcrush.c +@@ -1513,7 +1513,7 @@ static int copy_idat = 0; /* = 1 to simply copy the IDAT chunk data */ + #endif + + #ifndef LIBPNG_UNIFIED +-#include ++#include "png.h" + #define PNGCRUSH_TIMER_UINT_API extern unsigned int PNGAPI + #define PNGCRUSH_TIMER_VOID_API extern void PNGAPI + #else +@@ -2295,7 +2295,6 @@ static int overwrite = 0; /* 1: overwrite the input file instead of + creating a new output file */ + static int nofilecheck = 0; + static int no_limits = 0; +-static int new_mng = 0; + static png_bytep row_buf; + #ifdef PNGCRUSH_MULTIPLE_ROWS + static png_bytepp row_pointers; +@@ -2845,7 +2844,6 @@ void pngcrush_pause(void) + char keystroke; + fprintf(STDERR, "Press [ENTER] key to continue.\n"); + keystroke = (char) getc(stdin); +- keystroke = keystroke; /* stifle compiler warning */ + } + } + +@@ -3234,7 +3232,6 @@ void pngcrush_write_png(png_structp write_pointer, png_bytep data, static void pngcrush_flush(png_structp png_ptr) { /* Do nothing. */ -- PNG_UNUSED(png_ptr) +- PNGCRUSH_UNUSED(png_ptr) } -@@ -3555,7 +3554,7 @@ int main(int argc, char *argv[]) - pngcrush_flush); - #endif /* PNGCRUSH_LOCO */ - -- } -+ - - idat_length[0] = measure_idats(fpin); +@@ -3287,6 +3284,7 @@ void pngcrush_examine_pixels_fn(png_structp png_ptr, png_row_infop + if ((row_info->color_type == 2 || row_info->color_type == 6) && + make_gray == 1) /* RGB */ + { ++ make_gray = 2; + if (row_info->bit_depth == 8) + { + int incr=3; +@@ -3372,6 +3370,7 @@ void pngcrush_examine_pixels_fn(png_structp png_ptr, png_row_infop + make_opaque == 1)) + { + i = (int) row_info->rowbytes-1; ++ make_gray = 2; -@@ -4755,7 +4754,7 @@ int main(int argc, char *argv[]) - "gamma=%f" - # endif - " is not approx. 0.455\n", -- (unsigned long)file_gamma); -+ file_gamma); - } - } - #endif /* PNG_gAMA_SUPPORTED */ -@@ -6385,7 +6384,7 @@ png_uint_32 png_measure_idat(png_structp png_ptr) - png_reset_crc(png_ptr); - png_crc_read(png_ptr, chunk_name, 4); + if (row_info->bit_depth == 8) + { +@@ -8343,7 +8342,7 @@ png_uint_32 pngcrush_measure_idat(png_structp png_ptr) + printf(" Reading %c%c%c%c chunk.\n", + chunk_name[0],chunk_name[1],chunk_name[2],chunk_name[3]); - if (new_mng) + if (0) { const png_byte png_DHDR[5] = { 68, 72, 68, 82, '\0' }; const png_byte png_DEFI[5] = { 68, 69, 70, 73, '\0' }; -@@ -6477,7 +6476,7 @@ png_uint_32 png_measure_idat(png_structp png_ptr) - } - - #ifdef PNG_UINT_acTL -- else if (png_get_uint_32(chunk_name) == PNG_UINT_acTL) -+ if (png_get_uint_32(chunk_name) == PNG_UINT_acTL) - #else - else if (!png_memcmp(chunk_name, png_acTL, 4)) - #endif -@@ -6617,7 +6616,7 @@ png_uint_32 png_measure_idat(png_structp png_ptr) +@@ -8653,7 +8652,7 @@ png_uint_32 pngcrush_measure_idat(png_structp png_ptr) { 77, 69, 78, 68, '\0' }; if (!png_memcmp(chunk_name, png_MEND, 4)) { @@ -55,12 +69,11 @@ index bf625c6..f693089 100644 { png_free(mng_ptr,bb); return (0); -@@ -6629,7 +6628,7 @@ png_uint_32 png_measure_idat(png_structp png_ptr) - #endif - - -- if (input_format == 0) -+ if (1) - { - #ifdef PNG_UINT_IEND - if (png_get_uint_32(chunk_name) == PNG_UINT_IEND) +@@ -8736,6 +8735,7 @@ void print_version_info(void) + * immediately after this sentence: */ + " | Copyright (C) 1998-2002, 2006-2017 Glenn Randers-Pehrson\n" + " | Portions Copyright (C) 2005 Greg Roelofs\n" ++ " | Modified version for ImageOptim.\n" + " | This is a free, open-source program. Permission is irrevocably\n" + " | granted to everyone to use this version of pngcrush without\n" + " | payment of any fee.\n" diff --git a/pngcrush/pngcrush.xcodeproj/project.pbxproj b/pngcrush/pngcrush.xcodeproj/project.pbxproj index 66247c53..50c6bba7 100644 --- a/pngcrush/pngcrush.xcodeproj/project.pbxproj +++ b/pngcrush/pngcrush.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -144,7 +144,8 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0460; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; }; buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "pngcrush" */; compatibilityVersion = "Xcode 3.2"; @@ -218,16 +219,16 @@ isa = XCBuildConfiguration; buildSettings = { GCC_DYNAMIC_NO_PIC = NO; - INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = pngcrush; + SKIP_INSTALL = YES; }; name = Debug; }; 1DEB928708733DD80010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = pngcrush; + SKIP_INSTALL = YES; }; name = Release; }; @@ -235,6 +236,7 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5A27BA13139B08C00095FC2F /* debug.xcconfig */; buildSettings = { + ENABLE_TESTABILITY = YES; GCC_PREPROCESSOR_DEFINITIONS = ( PNG_CONFIGURE_LIBPNG, HAVE_CONFIG_H, @@ -243,6 +245,7 @@ GCC_WARN_64_TO_32_BIT_CONVERSION = NO; GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; LLVM_LTO = NO; + ONLY_ACTIVE_ARCH = YES; USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../libpng/"; }; name = Debug; @@ -269,6 +272,7 @@ buildSettings = { GCC_DYNAMIC_NO_PIC = NO; PRODUCT_NAME = download; + SDKROOT = macosx; }; name = Debug; }; @@ -277,6 +281,7 @@ buildSettings = { COPY_PHASE_STRIP = YES; PRODUCT_NAME = download; + SDKROOT = macosx; }; name = Release; }; diff --git a/pngquant/Makefile b/pngquant/Makefile new file mode 100644 index 00000000..a8161ba0 --- /dev/null +++ b/pngquant/Makefile @@ -0,0 +1,11 @@ +build: all + +all: src/Cargo.toml + +src/Cargo.toml: ../.gitmodules + ../scripts/fetch-submodule src && touch src/Cargo.toml + +src/lib/Cargo.toml: ../.gitmodules src/Cargo.toml + ../scripts/fetch-submodule src/lib && touch src/lib/Cargo.toml + +.PHONY: build all install clean diff --git a/pngquant/pngquant.xcodeproj/project.pbxproj b/pngquant/pngquant.xcodeproj/project.pbxproj new file mode 100644 index 00000000..4198aa3f --- /dev/null +++ b/pngquant/pngquant.xcodeproj/project.pbxproj @@ -0,0 +1,271 @@ +// !$*UTF8*$! +{ + /* generated with cargo-xcode 1.8.0 */ + archiveVersion = 1; + classes = { + }; + objectVersion = 53; + objects = { + +/* Begin PBXBuildFile section */ + CA00FD3D7ED13B3B3D19E325 /* Cargo.toml in Sources */ = {isa = PBXBuildFile; fileRef = CAF971CC4B513EF4668187A5 /* Cargo.toml */; settings = {COMPILER_FLAGS = "--bin 'pngquant'"; }; }; + +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + CAF471CC4B51AC6C1400ACA8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d"; + filePatterns = "*/Cargo.toml"; + fileType = pattern.proxy; + inputFiles = ( + ); + isEditable = 0; + name = "Cargo project build"; + outputFiles = ( + "$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)", + ); + script = "# generated with cargo-xcode 1.8.0\nset -xeu;\nexport PATH=\"$HOME/.cargo/bin:$PATH:/usr/local/bin:/opt/homebrew/bin\";\n# don't use ios/watchos linker for build scripts and proc macros\nexport CARGO_TARGET_AARCH64_APPLE_DARWIN_LINKER=/usr/bin/ld\nexport CARGO_TARGET_X86_64_APPLE_DARWIN_LINKER=/usr/bin/ld\n\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_OS=ios-macabi\nfi\nCARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\n\nif [ \"$CARGO_XCODE_BUILD_PROFILE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\n\nif [ \"$ACTION\" = clean ]; then\n cargo clean --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\";\n rm -f \"$SCRIPT_OUTPUT_FILE_0\"\n exit 0\nfi\ncargo build --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\" || {\n if command -v rustup &> /dev/null; then\n if ! rustup target list --installed | grep -Eq \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo >&2 \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn't installed (will try rustup next)\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can't install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\n fi\n echo >&2 \"error: cargo build failed\"; exit 1; }\n\n# it's too hard to explain Cargo's actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\" || { echo >&2 \"can't hardlink $BUILT_SRC to $SCRIPT_OUTPUT_FILE_0\"; exit 1; }\n\n# cargo generates a dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_PROFILE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -f \"$DEP_FILE_SRC\" ]; then\n DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\" || { echo >&2 \"can't copy $DEP_FILE_SRC to $DEP_FILE_DST\"; exit 1; }\n\n echo >> \"$DEP_FILE_DST\" \"${SCRIPT_OUTPUT_FILE_0/ /\\\\ /}: ${BUILT_SRC/ /\\\\ /}\"\nfi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don't stay around after archs change\n# must match input for LipoScript\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! grep -Eq \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n\necho \"success: $ACTION of $SCRIPT_OUTPUT_FILE_0 for $CARGO_XCODE_TARGET_TRIPLE\"\n"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXFileReference section */ + CA008FFA42538780035A8A54 /* pngquant */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = pngquant; sourceTree = BUILT_PRODUCTS_DIR; }; + CAF971CC4B513EF4668187A5 /* src/Cargo.toml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = src/Cargo.toml; sourceTree = ""; }; + + CAFD6179D382ACC9FD72F282 /* debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = ""; }; + CAFE6179D382ABC47E405028 /* release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + CAF071CC4B51D65BC3C892A8 = { + isa = PBXGroup; + children = ( + CAF971CC4B513EF4668187A5 /* Cargo.toml */, + CAF171CC4B5122869D176AE5 /* Products */, + CAF271CC4B5198AF0B5890DB /* Frameworks */, + CAFD6179D382ACC9FD72F282 /* debug.xcconfig */, + CAFE6179D382ABC47E405028 /* release.xcconfig */, + ); + sourceTree = ""; + }; + CAF171CC4B5122869D176AE5 /* Products */ = { + isa = PBXGroup; + children = ( + CA008FFA42538780035A8A54 /* pngquant */, + ); + name = Products; + sourceTree = ""; + }; + CAF271CC4B5198AF0B5890DB /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + CA008FFA42533B3B3D19E325 /* pngquant-bin */ = { + isa = PBXNativeTarget; + buildConfigurationList = CA00C6FFFF673B3B3D19E325 /* Build configuration list for PBXNativeTarget "pngquant-bin" */; + buildPhases = ( + CA005B305E043B3B3D19E325 /* Sources */, + CAF571CC4B51AF6EBB7F357C /* Universal Binary lipo */, + ); + buildRules = ( + CAF471CC4B51AC6C1400ACA8 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "pngquant-bin"; + productName = pngquant; + productReference = CA008FFA42538780035A8A54 /* pngquant */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + CAF371CC4B51E04653AD465F /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + TargetAttributes = { + CA008FFA42533B3B3D19E325 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = CAF671CC4B5180E02D6C7F57 /* Build configuration list for PBXProject "pngquant" */; + compatibilityVersion = "Xcode 11.4"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CAF071CC4B51D65BC3C892A8; + productRefGroup = CAF171CC4B5122869D176AE5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + CA008FFA42533B3B3D19E325 /* pngquant-bin */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + CAF571CC4B51AF6EBB7F357C /* Universal Binary lipo */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist", + ); + name = "Universal Binary lipo"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# generated with cargo-xcode 1.8.0\nset -eux;\ntr '\\n' '\\0' < \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nif [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + CA005B305E043B3B3D19E325 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CA00FD3D7ED13B3B3D19E325 /* Cargo.toml in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + CA003B5FE0C83B3B3D19E325 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = pngquant.d; + CARGO_XCODE_CARGO_FILE_NAME = pngquant; + + PRODUCT_NAME = pngquant; + SUPPORTED_PLATFORMS = macosx; + + }; + name = Release; + }; + CA009AA08B823B3B3D19E325 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = pngquant.d; + CARGO_XCODE_CARGO_FILE_NAME = pngquant; + + PRODUCT_NAME = pngquant; + SUPPORTED_PLATFORMS = macosx; + + }; + name = Debug; + }; + + CAF76179D3823CC16B37690B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAFE6179D382ABC47E405028 /* release.xcconfig */; + buildSettings = { + ADDITIONAL_SDKS = macosx; + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_PROFILE = release; + CARGO_XCODE_FEATURES = "static,cocoa"; + CARGO_XCODE_TARGET_ARCH = "$(CURRENT_ARCH)"; + "CARGO_XCODE_TARGET_ARCH[arch=arm64]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=arm64e]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64h]" = x86_64; + CARGO_XCODE_TARGET_OS = "$(PLATFORM_NAME)"; + "CARGO_XCODE_TARGET_OS[sdk=appletvos]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator][arch=x86_64]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + "CARGO_XCODE_TARGET_OS[sdk=watchsimulator]" = "watchos-sim"; + CURRENT_PROJECT_VERSION = 3.0; + MARKETING_VERSION = 3.0.2; + PRODUCT_NAME = pngquant; + RUSTUP_TOOLCHAIN = ""; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + }; + name = Release; + }; + CAF86179D382228BE02872F8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAFD6179D382ACC9FD72F282 /* debug.xcconfig */; + buildSettings = { + ADDITIONAL_SDKS = macosx; + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_PROFILE = debug; + CARGO_XCODE_FEATURES = "static,cocoa"; + CARGO_XCODE_TARGET_ARCH = "$(CURRENT_ARCH)"; + "CARGO_XCODE_TARGET_ARCH[arch=arm64]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=arm64e]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64h]" = x86_64; + CARGO_XCODE_TARGET_OS = "$(PLATFORM_NAME)"; + "CARGO_XCODE_TARGET_OS[sdk=appletvos]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator][arch=x86_64]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + "CARGO_XCODE_TARGET_OS[sdk=watchsimulator]" = "watchos-sim"; + CURRENT_PROJECT_VERSION = 3.0; + MARKETING_VERSION = 3.0.2; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = pngquant; + RUSTUP_TOOLCHAIN = ""; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + CA00C6FFFF673B3B3D19E325 /* Build configuration list for PBXNativeTarget "pngquant-bin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA003B5FE0C83B3B3D19E325 /* Release */, + CA009AA08B823B3B3D19E325 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CAF671CC4B5180E02D6C7F57 /* Build configuration list for PBXProject "pngquant" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CAF76179D3823CC16B37690B /* Release */, + CAF86179D382228BE02872F8 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CAF371CC4B51E04653AD465F /* Project object */; +} diff --git a/pngquant/src b/pngquant/src new file mode 160000 index 00000000..515575a1 --- /dev/null +++ b/pngquant/src @@ -0,0 +1 @@ +Subproject commit 515575a1e2389f18dd1cef8f3865854bc98495a1 diff --git a/scripts/fetch-submodule b/scripts/fetch-submodule new file mode 100755 index 00000000..b21b3ef8 --- /dev/null +++ b/scripts/fetch-submodule @@ -0,0 +1,15 @@ +#!/bin/bash + +# Set lock file path to this script dir +LOCKFILE="$(dirname "$PWD/$0")/.lock" + +removelockfile() { + rm -f "$LOCKFILE"; +} + +# Remove lock file on exit under any circumstances +trap removelockfile EXIT + +while test -f "$LOCKFILE"; do echo "locked, waiting (delete $LOCKFILE if stuck)"; sleep 1; done +touch "$LOCKFILE" +git submodule update --init $1 || git submodule update --init --recursive $1 || { echo "warning: could not update $1 submodule"; exit 0; } diff --git a/svgcleaner/src b/svgcleaner/src new file mode 160000 index 00000000..575eac74 --- /dev/null +++ b/svgcleaner/src @@ -0,0 +1 @@ +Subproject commit 575eac74400a5ac45c912b144f0c002aa4a0135f diff --git a/svgcleaner/svgcleaner.xcodeproj/project.pbxproj b/svgcleaner/svgcleaner.xcodeproj/project.pbxproj new file mode 100644 index 00000000..6c1d6828 --- /dev/null +++ b/svgcleaner/svgcleaner.xcodeproj/project.pbxproj @@ -0,0 +1,250 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 53; + objects = { + +/* Begin PBXBuildFile section */ + CA00ADC5E28FC09639ADC154 /* src/Cargo.toml in Sources */ = {isa = PBXBuildFile; fileRef = CAF9E5B13BD73EF4668187A5 /* src/Cargo.toml */; settings = {COMPILER_FLAGS = "--bin 'svgcleaner'"; }; }; +/* End PBXBuildFile section */ + +/* Begin PBXBuildRule section */ + CAF4E5B13BD7AC6C1400ACA8 /* PBXBuildRule */ = { + isa = PBXBuildRule; + compilerSpec = com.apple.compilers.proxy.script; + dependencyFile = "$(DERIVED_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME).d"; + filePatterns = "*/Cargo.toml"; + fileType = pattern.proxy; + inputFiles = ( + ); + isEditable = 0; + name = "Cargo project build"; + outputFiles = ( + "$(OBJECT_FILE_DIR)/$(CARGO_XCODE_TARGET_ARCH)-$(EXECUTABLE_NAME)", + ); + script = "# generated with cargo-xcode 1.7.0\nset -eu;\nexport PATH=\"$HOME/.cargo/bin:$PATH:/usr/local/bin:/opt/homebrew/bin\";\n\nif [ \"${IS_MACCATALYST-NO}\" = YES ]; then\n CARGO_XCODE_TARGET_OS=ios-macabi\nfi\nCARGO_XCODE_TARGET_TRIPLE=\"${CARGO_XCODE_TARGET_ARCH}-apple-${CARGO_XCODE_TARGET_OS}\"\nif [ \"$CARGO_XCODE_TARGET_OS\" != darwin ]; then\n export PATH=\"${PATH/\\/Contents\\/Developer\\/Toolchains\\/XcodeDefault.xctoolchain\\/usr\\/bin:/xcode-provided-ld-cant-link-lSystem-for-the-host-build-script:}\"\nfi\nif [ \"$CARGO_XCODE_BUILD_MODE\" == release ]; then\n OTHER_INPUT_FILE_FLAGS=\"${OTHER_INPUT_FILE_FLAGS} --release\"\nfi\n\nif [ \"$ACTION\" = clean ]; then\n cargo clean --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\";\n rm -f \"$SCRIPT_OUTPUT_FILE_0\"\n exit 0\nfi\ncargo build --verbose --manifest-path=\"$SCRIPT_INPUT_FILE\" --features=\"${CARGO_XCODE_FEATURES:-}\" ${OTHER_INPUT_FILE_FLAGS} --target=\"${CARGO_XCODE_TARGET_TRIPLE}\" || {\n if command -v rustup &> /dev/null; then\n if ! rustup target list --installed | grep -Eq \"${CARGO_XCODE_TARGET_TRIPLE}\"; then\n echo >&2 \"warning: this build requires rustup toolchain for $CARGO_XCODE_TARGET_TRIPLE, but it isn't installed (will try rustup next)\"\n rustup target add \"${CARGO_XCODE_TARGET_TRIPLE}\" || echo >&2 \"warning: can't install $CARGO_XCODE_TARGET_TRIPLE\"\n fi\n fi\n echo >&2 \"error: cargo build failed\"; exit 1; }\n\n# it's too hard to explain Cargo's actual exe path to Xcode build graph, so hardlink to a known-good path instead\nBUILT_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_FILE_NAME}\"\nln -f -- \"$BUILT_SRC\" \"$SCRIPT_OUTPUT_FILE_0\" || { echo >&2 \"can't hardlink $BUILT_SRC to $SCRIPT_OUTPUT_FILE_0\"; exit 1; }\n\n# cargo generates a dep file, but for its own path, so append our rename to it\nDEP_FILE_SRC=\"${CARGO_TARGET_DIR}/${CARGO_XCODE_TARGET_TRIPLE}/${CARGO_XCODE_BUILD_MODE}/${CARGO_XCODE_CARGO_DEP_FILE_NAME}\"\nif [ -f \"$DEP_FILE_SRC\" ]; then\n DEP_FILE_DST=\"${DERIVED_FILE_DIR}/${CARGO_XCODE_TARGET_ARCH}-${EXECUTABLE_NAME}.d\"\n cp -f \"$DEP_FILE_SRC\" \"$DEP_FILE_DST\" || { echo >&2 \"can't copy $DEP_FILE_SRC to $DEP_FILE_DST\"; exit 1; }\n\n echo >> \"$DEP_FILE_DST\" \"${SCRIPT_OUTPUT_FILE_0/ /\\\\ /}: ${BUILT_SRC/ /\\\\ /}\"\nfi\n\n# lipo script needs to know all the platform-specific files that have been built\n# archs is in the file name, so that paths don't stay around after archs change\n# must match input for LipoScript\nFILE_LIST=\"${DERIVED_FILE_DIR}/${ARCHS}-${EXECUTABLE_NAME}.xcfilelist\"\ntouch \"$FILE_LIST\"\nif ! grep -Eq \"$SCRIPT_OUTPUT_FILE_0\" \"$FILE_LIST\" ; then\n echo >> \"$FILE_LIST\" \"$SCRIPT_OUTPUT_FILE_0\"\nfi\n\necho \"success: $ACTION of $SCRIPT_OUTPUT_FILE_0 for $CARGO_XCODE_TARGET_TRIPLE\"\n"; + }; +/* End PBXBuildRule section */ + +/* Begin PBXFileReference section */ + CA00FC5A7BA854C4D48C4974 /* svgcleaner */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = svgcleaner; sourceTree = BUILT_PRODUCTS_DIR; }; + CAF9E5B13BD73EF4668187A5 /* src/Cargo.toml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = src/Cargo.toml; sourceTree = ""; }; + CAFD93EA0041ACC9FD72F282 /* debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = ""; }; + CAFE93EA0041ABC47E405028 /* release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + CAF0E5B13BD7D65BC3C892A8 = { + isa = PBXGroup; + children = ( + CAF9E5B13BD73EF4668187A5 /* src/Cargo.toml */, + CAF1E5B13BD722869D176AE5 /* Products */, + CAF2E5B13BD798AF0B5890DB /* Frameworks */, + CAFD93EA0041ACC9FD72F282 /* debug.xcconfig */, + CAFE93EA0041ABC47E405028 /* release.xcconfig */, + ); + sourceTree = ""; + }; + CAF1E5B13BD722869D176AE5 /* Products */ = { + isa = PBXGroup; + children = ( + CA00FC5A7BA854C4D48C4974 /* svgcleaner */, + ); + name = Products; + sourceTree = ""; + }; + CAF2E5B13BD798AF0B5890DB /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + CA00FC5A7BA8C09639ADC154 /* svgcleaner-bin */ = { + isa = PBXNativeTarget; + buildConfigurationList = CA00346C2CA4C09639ADC154 /* Build configuration list for PBXNativeTarget "svgcleaner-bin" */; + buildPhases = ( + CA008664A847C09639ADC154 /* Sources */, + CAF5E5B13BD7AF6EBB7F357C /* Universal Binary lipo */, + ); + buildRules = ( + CAF4E5B13BD7AC6C1400ACA8 /* PBXBuildRule */, + ); + dependencies = ( + ); + name = "svgcleaner-bin"; + productName = svgcleaner; + productReference = CA00FC5A7BA854C4D48C4974 /* svgcleaner */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + CAF3E5B13BD7E04653AD465F /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + TargetAttributes = { + CA00FC5A7BA8C09639ADC154 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = CAF6E5B13BD780E02D6C7F57 /* Build configuration list for PBXProject "svgcleaner" */; + compatibilityVersion = "Xcode 11.4"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = CAF0E5B13BD7D65BC3C892A8; + productRefGroup = CAF1E5B13BD722869D176AE5 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + CA00FC5A7BA8C09639ADC154 /* svgcleaner-bin */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + CAF5E5B13BD7AF6EBB7F357C /* Universal Binary lipo */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(DERIVED_FILE_DIR)/$(ARCHS)-$(EXECUTABLE_NAME).xcfilelist", + ); + name = "Universal Binary lipo"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# generated with cargo-xcode 1.7.0\nset -eux;\ntr '\\n' '\\0' < \"$DERIVED_FILE_DIR/$ARCHS-$EXECUTABLE_NAME.xcfilelist\" | xargs -0 lipo -create -output \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nif [ ${LD_DYLIB_INSTALL_NAME:+1} ]; then\n install_name_tool -id \"$LD_DYLIB_INSTALL_NAME\" \"$TARGET_BUILD_DIR/$EXECUTABLE_PATH\"\nfi\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + CA008664A847C09639ADC154 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CA00ADC5E28FC09639ADC154 /* src/Cargo.toml in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + CA00BCAF10DEC09639ADC154 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = svgcleaner.d; + CARGO_XCODE_CARGO_FILE_NAME = svgcleaner; + PRODUCT_NAME = svgcleaner; + SUPPORTED_PLATFORMS = macosx; + }; + name = Release; + }; + CA00BE89E854C09639ADC154 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CARGO_XCODE_CARGO_DEP_FILE_NAME = svgcleaner.d; + CARGO_XCODE_CARGO_FILE_NAME = svgcleaner; + PRODUCT_NAME = svgcleaner; + SUPPORTED_PLATFORMS = macosx; + }; + name = Debug; + }; + CAF793EA00413CC16B37690B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAFE93EA0041ABC47E405028 /* release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_MODE = release; + CARGO_XCODE_FEATURES = ""; + "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64; + "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + CURRENT_PROJECT_VERSION = 0.9; + MARKETING_VERSION = 0.9.6; + PRODUCT_NAME = svgcleaner; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + }; + name = Release; + }; + CAF893EA0041228BE02872F8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CAFD93EA0041ACC9FD72F282 /* debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CARGO_TARGET_DIR = "$(PROJECT_TEMP_DIR)/cargo_target"; + CARGO_XCODE_BUILD_MODE = debug; + CARGO_XCODE_FEATURES = ""; + "CARGO_XCODE_TARGET_ARCH[arch=arm64*]" = aarch64; + "CARGO_XCODE_TARGET_ARCH[arch=i386]" = i686; + "CARGO_XCODE_TARGET_ARCH[arch=x86_64*]" = x86_64; + "CARGO_XCODE_TARGET_OS[sdk=appletvos*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=appletvsimulator*]" = tvos; + "CARGO_XCODE_TARGET_OS[sdk=iphoneos*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*]" = "ios-sim"; + "CARGO_XCODE_TARGET_OS[sdk=iphonesimulator*][arch=x86_64*]" = ios; + "CARGO_XCODE_TARGET_OS[sdk=macosx*]" = darwin; + CURRENT_PROJECT_VERSION = 0.9; + MARKETING_VERSION = 0.9.6; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = svgcleaner; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SUPPORTS_MACCATALYST = YES; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + CA00346C2CA4C09639ADC154 /* Build configuration list for PBXNativeTarget "svgcleaner-bin" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CA00BCAF10DEC09639ADC154 /* Release */, + CA00BE89E854C09639ADC154 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CAF6E5B13BD780E02D6C7F57 /* Build configuration list for PBXProject "svgcleaner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CAF793EA00413CC16B37690B /* Release */, + CAF893EA0041228BE02872F8 /* Debug */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CAF3E5B13BD7E04653AD465F /* Project object */; +} diff --git a/svgo/Makefile b/svgo/Makefile new file mode 100644 index 00000000..d8284309 --- /dev/null +++ b/svgo/Makefile @@ -0,0 +1,12 @@ +all: ./build/svgo.js + +./build/svgo.js: ./node_modules/.bin/webpack index.js webpack.config.js + ./node_modules/.bin/webpack + +./node_modules/.bin/webpack: package.json + npm install && touch -c ./node_modules/.bin/webpack + +clean: + -rm -rf build node_modules + +.PHONY: clean diff --git a/svgo/index.js b/svgo/index.js new file mode 100644 index 00000000..68bb9d07 --- /dev/null +++ b/svgo/index.js @@ -0,0 +1,84 @@ +"use strict"; + +const SVGO = require('svgo'); +const fs = require('fs'); + +const defaults = [ + 'cleanupAttrs', + 'cleanupListOfValues', + 'cleanupNumericValues', + 'convertColors', + 'convertStyleToAttrs', + 'minifyStyles', + 'moveGroupAttrsToElems', + 'removeComments', + 'removeDoctype', + 'removeEditorsNSData', + 'removeEmptyAttrs', + 'removeEmptyContainers', + 'removeEmptyText', + 'removeNonInheritableGroupAttrs', + 'removeXMLProcInst', + 'sortAttrs', +]; + +const lossy = [ + 'addAttributesToSVGElement', + 'addClassesToSVGElement', + 'cleanupEnableBackground', + 'cleanupIDs', + 'collapseGroups', + 'convertPathData', + 'convertShapeToPath', + 'convertTransform', + 'mergePaths', + 'moveElemsAttrsToGroup', + 'removeAttrs', + 'removeDesc', + 'removeDimensions', + 'removeElementsByAttr', + 'removeHiddenElems', + 'removeMetadata', + 'removeRasterImages', + 'removeStyleElement', + 'removeTitle', + 'removeUnknownsAndDefaults', + 'removeUnusedNS', + 'removeUselessDefs', + 'removeUselessStrokeAndFill', + 'removeViewBox', + 'removeXMLNS', +]; + + +try { + const useLossy = process.argv[2]; + const inFile = process.argv[3]; + const outFile = process.argv[4]; + const svgstr = fs.readFileSync(inFile); + + const plugins = useLossy == "1" ? defaults.concat(lossy) : defaults; + + const svgo = new SVGO({ + full: true, + plugins: plugins, + }); + svgo.optimize(svgstr).then(result => { + if (result.error || !result.data) { + console.error(result.error); + process.exit(1); + } + try { + fs.writeFileSync(outFile, result.data); + } catch(err) { + console.error(err); + process.exit(1); + } + }, err => { + console.error(err); + process.exit(1); + }); +} catch(err) { + console.error(err); + process.exit(1); +} diff --git a/svgo/package.json b/svgo/package.json new file mode 100644 index 00000000..864171e8 --- /dev/null +++ b/svgo/package.json @@ -0,0 +1,27 @@ +{ + "name": "imageoptim-svgo-integration", + "version": "1.0.0", + "description": "Internal glue", + "main": "index.js", + "scripts": { + "test": "mocha" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/pornel/ImageOptim.git" + }, + "author": "Kornel LesiƄski (https://kornel.ski/)", + "license": "GPL-3.0", + "bugs": { + "url": "https://github.com/pornel/ImageOptim/issues" + }, + "homepage": "https://github.com/pornel/ImageOptim#readme", + "dependencies": { + "svgo": "^1.0.0" + }, + "devDependencies": { + "json-loader": "^0.5.7", + "webpack": "^5", + "webpack-cli": "^5" + } +} diff --git a/svgo/webpack.config.js b/svgo/webpack.config.js new file mode 100644 index 00000000..03dc85f3 --- /dev/null +++ b/svgo/webpack.config.js @@ -0,0 +1,23 @@ +"use strict"; +const path = require("path"); +const webpack = require("webpack"); + +module.exports = { + cache: true, + context: __dirname, + entry: "./index.js", + externals: { + 'js-yaml': "undefined", // Pulls in Esprima. YAML is not needed anyway. + './utils/traslateWithSourceMap': '{}', // 0.7 Removes sourceMap support from CSSO. + './sourceMap': '{}', // 1.0 Removes sourceMap support from CSSO. + }, + output: { + path: path.join(__dirname, "build"), + filename: "svgo.js", + }, + target: "node", + mode: "production", + optimization: { + minimize: true, + }, +}; diff --git a/zlib/Makefile b/zlib/Makefile index 21c59508..23dd285a 100755 --- a/zlib/Makefile +++ b/zlib/Makefile @@ -1,11 +1,17 @@ # zlib is not built here! It's included as part of libpng instead. -VERSION=0.6.3 +VERSION=0.7.7 + +build: all + +all: zlib.h zlib.h: - curl -L http://downloads.sourceforge.net/project/optipng/OptiPNG/optipng-$(VERSION)/optipng-$(VERSION).tar.gz | tar xz --strip-components=3 --exclude=Makefile optipng-$(VERSION)/lib/zlib - + curl -L http://downloads.sourceforge.net/project/optipng/OptiPNG/optipng-$(VERSION)/optipng-$(VERSION).tar.gz | tar xz --strip-components=3 --exclude=Makefile optipng-$(VERSION)/src/zlib + clean: -install: \ No newline at end of file +install: + +.PHONY: build all install clean diff --git a/zopfli-png/Makefile b/zopfli-png/Makefile new file mode 100644 index 00000000..16c8637a --- /dev/null +++ b/zopfli-png/Makefile @@ -0,0 +1,9 @@ +build: all + +all: zopfli/src + +zopfli/src: ../.gitmodules + ../scripts/fetch-submodule zopfli && touch zopfli/src + +.PHONY: build all install clean + diff --git a/zopfli-png/zopfli b/zopfli-png/zopfli new file mode 160000 index 00000000..ba79a654 --- /dev/null +++ b/zopfli-png/zopfli @@ -0,0 +1 @@ +Subproject commit ba79a6547d7c82b8ec43911b19168afaf2767100 diff --git a/zopfli-png/zopfli-png.xcodeproj/project.pbxproj b/zopfli-png/zopfli-png.xcodeproj/project.pbxproj new file mode 100644 index 00000000..43a2ecf9 --- /dev/null +++ b/zopfli-png/zopfli-png.xcodeproj/project.pbxproj @@ -0,0 +1,320 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 5A2ACD381790A38B004992B7 /* blocksplitter.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD281790A38B004992B7 /* blocksplitter.c */; }; + 5A2ACD391790A38B004992B7 /* cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD291790A38B004992B7 /* cache.c */; }; + 5A2ACD3A1790A38B004992B7 /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD2A1790A38B004992B7 /* deflate.c */; }; + 5A2ACD3B1790A38B004992B7 /* gzip_container.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD2B1790A38B004992B7 /* gzip_container.c */; }; + 5A2ACD3C1790A38B004992B7 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD2C1790A38B004992B7 /* hash.c */; }; + 5A2ACD3D1790A38B004992B7 /* katajainen.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD2D1790A38B004992B7 /* katajainen.c */; }; + 5A2ACD3E1790A38B004992B7 /* lz77.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD2E1790A38B004992B7 /* lz77.c */; }; + 5A2ACD3F1790A38B004992B7 /* squeeze.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD2F1790A38B004992B7 /* squeeze.c */; }; + 5A2ACD401790A38B004992B7 /* tree.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD301790A38B004992B7 /* tree.c */; }; + 5A2ACD411790A38B004992B7 /* util.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD311790A38B004992B7 /* util.c */; }; + 5A2ACD421790A38B004992B7 /* zlib_container.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD321790A38B004992B7 /* zlib_container.c */; }; + 5A2ACD431790A38B004992B7 /* zopfli_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD331790A38B004992B7 /* zopfli_lib.c */; }; + 5A2ACD441790A38B004992B7 /* lodepng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD341790A38B004992B7 /* lodepng.cpp */; }; + 5A2ACD451790A38B004992B7 /* lodepng_util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD351790A38B004992B7 /* lodepng_util.cpp */; }; + 5A2ACD461790A38B004992B7 /* zopflipng_lib.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD361790A38B004992B7 /* zopflipng_lib.cc */; }; + 5A2ACD471790A38B004992B7 /* zopflipng_bin.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5A2ACD371790A38B004992B7 /* zopflipng_bin.cc */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 5AD202BA1B52A64C000D4FF2 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5A1EBE6217908D9D00361F08 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5AD202B21B52A641000D4FF2; + remoteInfo = download; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 5A1EBE6817908D9D00361F08 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 5A1EBE6A17908D9D00361F08 /* zopflipng */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = zopflipng; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A1EBEB317908E7400361F08 /* release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = release.xcconfig; path = ../imageoptim/release.xcconfig; sourceTree = ""; }; + 5A1EBEB417908E7400361F08 /* debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = debug.xcconfig; path = ../imageoptim/debug.xcconfig; sourceTree = ""; }; + 5A2ACD281790A38B004992B7 /* blocksplitter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = blocksplitter.c; path = zopfli/src/zopfli/blocksplitter.c; sourceTree = ""; }; + 5A2ACD291790A38B004992B7 /* cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cache.c; path = zopfli/src/zopfli/cache.c; sourceTree = ""; }; + 5A2ACD2A1790A38B004992B7 /* deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.c; name = deflate.c; path = zopfli/src/zopfli/deflate.c; sourceTree = ""; tabWidth = 2; }; + 5A2ACD2B1790A38B004992B7 /* gzip_container.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gzip_container.c; path = zopfli/src/zopfli/gzip_container.c; sourceTree = ""; }; + 5A2ACD2C1790A38B004992B7 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = hash.c; path = zopfli/src/zopfli/hash.c; sourceTree = ""; }; + 5A2ACD2D1790A38B004992B7 /* katajainen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = katajainen.c; path = zopfli/src/zopfli/katajainen.c; sourceTree = ""; }; + 5A2ACD2E1790A38B004992B7 /* lz77.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lz77.c; path = zopfli/src/zopfli/lz77.c; sourceTree = ""; }; + 5A2ACD2F1790A38B004992B7 /* squeeze.c */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.c; name = squeeze.c; path = zopfli/src/zopfli/squeeze.c; sourceTree = ""; tabWidth = 2; }; + 5A2ACD301790A38B004992B7 /* tree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tree.c; path = zopfli/src/zopfli/tree.c; sourceTree = ""; }; + 5A2ACD311790A38B004992B7 /* util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = util.c; path = zopfli/src/zopfli/util.c; sourceTree = ""; }; + 5A2ACD321790A38B004992B7 /* zlib_container.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zlib_container.c; path = zopfli/src/zopfli/zlib_container.c; sourceTree = ""; }; + 5A2ACD331790A38B004992B7 /* zopfli_lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zopfli_lib.c; path = zopfli/src/zopfli/zopfli_lib.c; sourceTree = ""; }; + 5A2ACD341790A38B004992B7 /* lodepng.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lodepng.cpp; path = zopfli/src/zopflipng/lodepng/lodepng.cpp; sourceTree = ""; }; + 5A2ACD351790A38B004992B7 /* lodepng_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = lodepng_util.cpp; path = zopfli/src/zopflipng/lodepng/lodepng_util.cpp; sourceTree = ""; }; + 5A2ACD361790A38B004992B7 /* zopflipng_lib.cc */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.cpp.cpp; name = zopflipng_lib.cc; path = zopfli/src/zopflipng/zopflipng_lib.cc; sourceTree = ""; tabWidth = 2; }; + 5A2ACD371790A38B004992B7 /* zopflipng_bin.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zopflipng_bin.cc; path = zopfli/src/zopflipng/zopflipng_bin.cc; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 5A1EBE6717908D9D00361F08 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 5A1EBE6117908D9D00361F08 = { + isa = PBXGroup; + children = ( + 5A1EBE6B17908D9D00361F08 /* Products */, + 5A1EBE9717908E1F00361F08 /* Source */, + 5A1EBEB417908E7400361F08 /* debug.xcconfig */, + 5A1EBEB317908E7400361F08 /* release.xcconfig */, + ); + sourceTree = ""; + }; + 5A1EBE6B17908D9D00361F08 /* Products */ = { + isa = PBXGroup; + children = ( + 5A1EBE6A17908D9D00361F08 /* zopflipng */, + ); + name = Products; + sourceTree = ""; + }; + 5A1EBE9717908E1F00361F08 /* Source */ = { + isa = PBXGroup; + children = ( + 5A2ACD281790A38B004992B7 /* blocksplitter.c */, + 5A2ACD291790A38B004992B7 /* cache.c */, + 5A2ACD2A1790A38B004992B7 /* deflate.c */, + 5A2ACD2B1790A38B004992B7 /* gzip_container.c */, + 5A2ACD2C1790A38B004992B7 /* hash.c */, + 5A2ACD2D1790A38B004992B7 /* katajainen.c */, + 5A2ACD341790A38B004992B7 /* lodepng.cpp */, + 5A2ACD351790A38B004992B7 /* lodepng_util.cpp */, + 5A2ACD2E1790A38B004992B7 /* lz77.c */, + 5A2ACD2F1790A38B004992B7 /* squeeze.c */, + 5A2ACD301790A38B004992B7 /* tree.c */, + 5A2ACD311790A38B004992B7 /* util.c */, + 5A2ACD321790A38B004992B7 /* zlib_container.c */, + 5A2ACD331790A38B004992B7 /* zopfli_lib.c */, + 5A2ACD371790A38B004992B7 /* zopflipng_bin.cc */, + 5A2ACD361790A38B004992B7 /* zopflipng_lib.cc */, + ); + name = Source; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXLegacyTarget section */ + 5AD202B21B52A641000D4FF2 /* download */ = { + isa = PBXLegacyTarget; + buildArgumentsString = "$(ACTION)"; + buildConfigurationList = 5AD202B91B52A641000D4FF2 /* Build configuration list for PBXLegacyTarget "download" */; + buildPhases = ( + ); + buildToolPath = /usr/bin/make; + buildWorkingDirectory = ""; + dependencies = ( + ); + name = download; + passBuildSettingsInEnvironment = 1; + productName = download; + }; +/* End PBXLegacyTarget section */ + +/* Begin PBXNativeTarget section */ + 5A1EBE6917908D9D00361F08 /* zopflipng */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5A1EBE7317908D9D00361F08 /* Build configuration list for PBXNativeTarget "zopflipng" */; + buildPhases = ( + 5A1EBE6617908D9D00361F08 /* Sources */, + 5A1EBE6717908D9D00361F08 /* Frameworks */, + 5A1EBE6817908D9D00361F08 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 5AD202BB1B52A64C000D4FF2 /* PBXTargetDependency */, + ); + name = zopflipng; + productName = zopflipng; + productReference = 5A1EBE6A17908D9D00361F08 /* zopflipng */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 5A1EBE6217908D9D00361F08 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1500; + TargetAttributes = { + 5AD202B21B52A641000D4FF2 = { + CreatedOnToolsVersion = 7.0; + }; + }; + }; + buildConfigurationList = 5A1EBE6517908D9D00361F08 /* Build configuration list for PBXProject "zopfli-png" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + en, + ); + mainGroup = 5A1EBE6117908D9D00361F08; + productRefGroup = 5A1EBE6B17908D9D00361F08 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 5A1EBE6917908D9D00361F08 /* zopflipng */, + 5AD202B21B52A641000D4FF2 /* download */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 5A1EBE6617908D9D00361F08 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5A2ACD381790A38B004992B7 /* blocksplitter.c in Sources */, + 5A2ACD391790A38B004992B7 /* cache.c in Sources */, + 5A2ACD3A1790A38B004992B7 /* deflate.c in Sources */, + 5A2ACD3B1790A38B004992B7 /* gzip_container.c in Sources */, + 5A2ACD3C1790A38B004992B7 /* hash.c in Sources */, + 5A2ACD3D1790A38B004992B7 /* katajainen.c in Sources */, + 5A2ACD441790A38B004992B7 /* lodepng.cpp in Sources */, + 5A2ACD451790A38B004992B7 /* lodepng_util.cpp in Sources */, + 5A2ACD3E1790A38B004992B7 /* lz77.c in Sources */, + 5A2ACD3F1790A38B004992B7 /* squeeze.c in Sources */, + 5A2ACD401790A38B004992B7 /* tree.c in Sources */, + 5A2ACD411790A38B004992B7 /* util.c in Sources */, + 5A2ACD421790A38B004992B7 /* zlib_container.c in Sources */, + 5A2ACD431790A38B004992B7 /* zopfli_lib.c in Sources */, + 5A2ACD471790A38B004992B7 /* zopflipng_bin.cc in Sources */, + 5A2ACD461790A38B004992B7 /* zopflipng_lib.cc in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 5AD202BB1B52A64C000D4FF2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5AD202B21B52A641000D4FF2 /* download */; + targetProxy = 5AD202BA1B52A64C000D4FF2 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 5A1EBE7117908D9D00361F08 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A1EBEB417908E7400361F08 /* debug.xcconfig */; + buildSettings = { + ENABLE_TESTABILITY = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + NDEBUG, + NS_BLOCK_ASSERTIONS, + ); + HEADER_SEARCH_PATHS = "$(SRCROOT)/../libpng/"; + ONLY_ACTIVE_ARCH = YES; + }; + name = Debug; + }; + 5A1EBE7217908D9D00361F08 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A1EBEB317908E7400361F08 /* release.xcconfig */; + buildSettings = { + GCC_PREPROCESSOR_DEFINITIONS = ( + NDEBUG, + NS_BLOCK_ASSERTIONS, + ); + HEADER_SEARCH_PATHS = "$(SRCROOT)/../libpng/"; + LLVM_LTO = YES; + }; + name = Release; + }; + 5A1EBE7417908D9D00361F08 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEAD_CODE_STRIPPING = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 5A1EBE7517908D9D00361F08 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEAD_CODE_STRIPPING = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 5AD202B31B52A641000D4FF2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Debug; + }; + 5AD202B41B52A641000D4FF2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 5A1EBE6517908D9D00361F08 /* Build configuration list for PBXProject "zopfli-png" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5A1EBE7117908D9D00361F08 /* Debug */, + 5A1EBE7217908D9D00361F08 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5A1EBE7317908D9D00361F08 /* Build configuration list for PBXNativeTarget "zopflipng" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5A1EBE7417908D9D00361F08 /* Debug */, + 5A1EBE7517908D9D00361F08 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5AD202B91B52A641000D4FF2 /* Build configuration list for PBXLegacyTarget "download" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5AD202B31B52A641000D4FF2 /* Debug */, + 5AD202B41B52A641000D4FF2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 5A1EBE6217908D9D00361F08 /* Project object */; +}