Recenze: ON1 Photo RAW

Sdílet

Autor: ON1 Software
Fotoeditační programy se v posledních letech s velkou radostí poměřují s konkurenčními softwary Photoshop nebo Lightroom. Na jedné straně je to vcelku pochopitelné, protože to jsou do značné míry laťky, podle kterých lze, byť subjektivně, fotoeditory posuzovat. A o něco podobného se teď snaží novinky firmy ON1.

Chvilku si na ovládání budeme muset zvykat, protože pokud jsme zvyklí na jiné fotoeditační programy, v prvních minutách či hodinách nám bude přecházet zrak. Copak o to, v programu je všechno a možná ještě víc, akorát je to všechno trochu jinak. Když ale nové logice a novému uspořádání přijdeme na kloub, budeme vrnět spokojeností.

Program se otevírá jako browser, kde si můžeme pohrát jak s archivací, tak i s označováním fotografií. Tento DAM (Digital Asset Manager) v balíku Perfect Photo Suite chyběl, a nutno říci, že se skutečně povedl, protože je to fičák. Musíme si ale zvyknout na libůstky, knoflík Import prostě nenajdeme a vhodný adresář si musíme najít sami. Síla je ale v katalogizaci, starý dobrý Lightroom zůstavá v prachu, protože obsah katalogu se automaticky updatuje.

Editace je více než robustní a využívá kombinaci předem nastavených templátů a ručního nastavení. A že těch templátů je. Při editaci často používám Alien Skin Exposure, které je automatickou součástí, takže o jednu aplikaci méně. Korekce čoček sice existuje, ale nabídka není nijak ohromující. Opět si budeme muset zvykat na některé ovládání, občas ale narazíme na perlu, jako třeba možnost úprav jen částí obrázku. Jednodušší už to asi nepůjde. V nové verzi bylo výrazně posíleno maskování.

Samozřejmě ani tady není všechno dokonalé, program má totiž výrazné problémy s rychlostí, a to i na nadupaném počítači. Problém pocítíme nejen při práci s velkými soubory, ale také při přepínání mezi jednotlivými moduly. Na oblíbenou funkci Crop jsme si už dávno zvykli. Ne že by tady nebyla, ale občas funguje tak nějak nevalně.

Zatímco nabídka ovládání na pravé straně moditoru se zdá být na podobně pokročilý program občas poněkud nedostatečná, pravá síla programu je v nabídce předem připravených modifikací, které naskakují na levé straně monitoru. Tato nastavení odpovídají jak typu fotografie (třeba architektura, příroda nebo sport), tak  možnému způsobu, od HDR až po glamour. Všechny možnosti ale můžeme podle libosti upravovat. Portrait odpovídá možnostem maximálních úprav tváře, k tomu si algoritmus tváře najde sám. Úpravy jsou jednoduché, žádné boje s vrstvením, spíše to připomíná použití makeupu. Aplikace HDR je jednou z nejlepších na současném trhu.

Verdikt

Díky bohatou nabídce efektů a až neskutečně robustní schopností editovat tak, aby to bylo ku prospěchu věci a bude program ON1 Photo Raw velice zajímavý pro celou řadu zákazníků. A hlavně – pokud si program koupíme, je náš, žádné šílené měsíční poplatky. Tady zištnosti Adobe skutečně překročila hranice slušnosti.  Výrobce nám navíc nabízí málo obvyklou dvouměsíční zkušební dobu, takže nic neriskujeme.

 

Pro: Zajímavá alternativa známějším softwarům

Proti: Pomalý

Celkem: 90 procent

prace_s_linuxem_tip

Výrobce:  ON1

Cena: 79,99 USD (asi 2 tisíce korun)

Autor článku

Dlouholetý spolupracovník magazínu PCWorld a Computerworld.cz. Zajímají ho hlavně recenze různých programů, speciálně fotoeditory a vše kolem grafiky.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »