ImageNew toBase64 проблема с кодировкой с потерей качества в ColdFusion - PullRequest
4 голосов
/ 08 ноября 2011

У меня проблемы с toBase64 () некоторое время.Я надеюсь, что кто-то может сказать мне, почему CF toBase64 (), кажется, что-то потерял, т.е. в моем примере это снижает качество изображения.

У меня есть решение (см. Последний пример кода ниже), но я не ненавижу неПонимание, почему и я бы хотел решить эту проблему, - это CF.

Если кто-то будет так любезен выполнить приведенный ниже код, вы увидите, что после преобразования в toBase64 качество изображения плохое.Ничего особенного, но после кодировки это выглядит не так хорошо.Если вы никогда не заметили, то попробуйте, вы поймете, что я имею в виду.

Кто-нибудь знает почему или как решить эту проблему в CF?

<!--- EXAMPLE 1 --->

<!--- GET IMAGE - --->
<cfset image = ImageNew("test.png")>
<!--- BEFORE GOOD--->
<cfimage action="writeToBrowser" source="#image#" >
 <cfset image = toBinary(toBase64(image)) />
 <!--- AFTER --->
<cfimage action="writeToBrowser" source="#image#" >
<!--- Example 2 --->
<cfset image = ImageNew("test.png")>
<cfset FileWrite(expandPath('./converted.image'),toBinary(toBase64(image))) />
<!--- without any cfimage processing, the outputted file is a JPEG --->

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

image = createObject("java","it.sauronsoftware.base64.Base64").encode(image);
 toBinary(image );

Пример вывода изображенияприведенный выше код можно найти здесь: http://i56.tinypic.com/29fwiq.png Во-первых, перед тем, как toBase64, через секунду, вы можете увидеть, что изображение немного потеряло качество после функции toBase64 на втором выходе.

Обновление: Как указывает Питер, проблема, похоже, связана с кодом автоматического вывода / преобразования в ImageObject, который обеспечивает двоичный вывод для функции toBase64 для кодирования.

Обновление Я представил это как ошибку в CF 9.0.1, пожалуйста, проголосуйте за ошибку 3177303 https://bugbase.adobe.com/index.cfm?event=bug&id=3177303

Ответы [ 2 ]

3 голосов
/ 08 ноября 2011

использование toBase64(imageGetBlob(myImg))

см .: http://blog.dkferguson.com/index.cfm/2010/4/27/All-your-base64-are-not-equal

1 голос
/ 09 ноября 2011

Я вижу, что никто не упоминал функцию imageWriteBase64 (), которая была в ColdFusion начиная с версии 8. Я не уверен, почему.

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-796b.html

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

<cfdirectory action="list" directory="#expandPath('./images')#" name="imageDir" type="file" />

<cfloop query="imageDir">
    <cfset ext = listLast(imageDir.name, ".") />
    <cfset name = imageDir.name />
    <cfset imagePath = imageDir.directory & "/" & name />

    <cfset imageFile = imageNew(imagePath) />

    <cfset imageWriteBase64(imageFile,"#expandPath('./base64')#/#name#.txt",ext, true) />   
</cfloop>
...